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.