Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So führen Sie eine Sql Server CE-Tabellenaktualisierung aus einer anderen Tabelle durch

Ihr zweiter Versuch funktioniert aufgrund des Books On-Line-Eintrags nicht für UPDATE , SQL CE erlaubt kein FROM -Klausel in einer Update-Anweisung.

Ich habe keine SQL Compact Edition, um es zu testen, aber das hier könnte funktionieren:

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
             )

Es kann sein, dass Sie JOBMAKE als JM aliasieren können, um die Abfrage etwas kürzer zu machen.

BEARBEITEN

Ich bin mir der Einschränkungen von SQL CE nicht 100% sicher, da sie sich auf die in den Kommentaren aufgeworfene Frage beziehen (wie man einen Wert in JOBMAKE mit einem Wert von JOBVISIT aktualisiert). Der Versuch, auf den Inhalt der EXISTS-Klausel in der äußeren Abfrage zu verweisen, wird in keinem SQL-Dialekt unterstützt, auf den ich gestoßen bin, aber es gibt eine andere Methode, die Sie ausprobieren können. Dies ist ungetestet, könnte aber funktionieren, da es so aussieht, als ob SQL CE korrelierte Unterabfragen unterstützt:

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
                 )

Es gibt jedoch eine Einschränkung. Diese Abfrage schlägt fehl, wenn für jede Zeile in JOBMAKE mehr als eine Zeile in JOBVISIT neu abgestimmt wird. Wenn dies nicht funktioniert (oder Sie die innere Abfrage nicht ohne weiteres auf eine einzelne Zeile pro äußerer Zeile beschränken können), wäre es möglich, sie durchzuführen eine zeilenweise Aktualisierung mit einem Cursor.