Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come eseguire l'aggiornamento della tabella Sql Server CE da un'altra tabella

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.