Il tuo secondo tentativo non funziona perché, in base alla voce Libri in linea per AGGIORNAMENTO
, SQL CE non consente un FROM
clausola in una dichiarazione di aggiornamento.
Non ho SQL Compact Edition su cui testarlo, ma potrebbe funzionare:
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
)
È possibile che tu possa alias JOBMAKE come JM per rendere la query leggermente più breve.
MODIFICA
Non sono sicuro al 100% delle limitazioni di SQL CE in quanto si riferiscono alla domanda sollevata nei commenti (come aggiornare un valore in JOBMAKE usando un valore da JOBVISIT). Il tentativo di fare riferimento al contenuto della clausola EXISTS nella query esterna non è supportato in nessun dialetto SQL che ho incontrato, ma c'è un altro metodo che puoi provare. Questo non è testato ma potrebbe funzionare, poiché sembra che SQL CE supporti le sottoquery correlate:
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
)
C'è una limitazione, tuttavia. Questa query avrà esito negativo se più di una riga in JOBVISIT viene risintonizzata per ogni riga in JOBMAKE. Se ciò non funziona (o non è possibile limitare direttamente la query interna a una singola riga per riga esterna), sarebbe possibile eseguire un aggiornamento riga per riga utilizzando un cursore.