Ditt andra försök fungerar inte eftersom, baserat på Books On-Line-posten för UPPDATERING
, SQL CE tillåter inte en FROM
klausul i en uppdateringssats.
Jag har inte SQL Compact Edition att testa den på, men det här kanske fungerar:
UPDATE JOBMAKE
SET WIP_STATUS = '10sched1'
WHERE EXISTS (SELECT 1
FROM JOBVISIT AS JV
WHERE JV.JBT_TYPE = JOBMAKE.JBT_TYPE
AND JV.JOB_NUMBER = JOBMAKE.JOB_NUMBER
AND JV.JVST_ID = @jvst_id
)
Det kan vara så att du kan alias JOBMAKE som JM för att göra frågan något kortare.
REDIGERA
Jag är inte 100% säker på begränsningarna för SQL CE eftersom de relaterar till frågan som ställs i kommentarerna (hur man uppdaterar ett värde i JOBMAKE med ett värde från JOBVISIT). Att försöka hänvisa till innehållet i EXISTS-satsen i den yttre frågan stöds inte i någon SQL-dialekt jag har stött på, men det finns en annan metod du kan prova. Detta är opröstat men kan fungera, eftersom det ser ut som att SQL CE stöder korrelerade underfrågor:
UPDATE JOBMAKE
SET WIP_STATUS = (SELECT JV.RES_CODE
FROM JOBVISIT AS JV
WHERE JV.JBT_TYPE = JOBMAKE.JBT_TYPE
AND JV.JOB_NUMBER = JOBMAKE.JOB_NUMBER
AND JV.JVST_ID = 20
)
Det finns dock en begränsning. Den här frågan kommer att misslyckas om mer än en rad i JOBVISIT ställs om för varje rad i JOBMAKE. Om detta inte fungerar (eller om du inte enkelt kan begränsa den inre frågan till en enda rad per yttre rad), skulle det vara möjligt att utföra en rad-för-rad-uppdatering med hjälp av en markör.