Druga próba nie działa, ponieważ na podstawie wpisu Książki online do aktualizacji
, SQL CE nie zezwala na FROM
klauzula w oświadczeniu aktualizacyjnym.
Nie mam programu SQL Compact Edition do testowania, ale może to zadziałać:
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
)
Możliwe, że możesz użyć aliasu JOBMAKE jako JM, aby zapytanie było nieco krótsze.
EDYTUJ
Nie jestem w 100% pewien ograniczeń SQL CE, ponieważ odnoszą się one do pytania postawionego w komentarzach (jak zaktualizować wartość w JOBMAKE przy użyciu wartości z JOBVISIT). Próba odniesienia się do zawartości klauzuli EXISTS w zewnętrznym zapytaniu nie jest obsługiwana w żadnym dialekcie SQL, z którym się spotkałem, ale istnieje inna metoda, którą możesz wypróbować. To nie zostało przetestowane, ale może działać, ponieważ wygląda na to, że SQL CE obsługuje skorelowane podzapytania:
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
)
Istnieje jednak ograniczenie. To zapytanie zakończy się niepowodzeniem, jeśli więcej niż jeden wiersz w JOBVISIT zostanie zwrócony dla każdego wiersza w JOBMAKE.Jeśli to nie zadziała (lub nie możesz bezpośrednio ograniczyć wewnętrznego zapytania do jednego wiersza na wiersz zewnętrzny), możliwe byłoby wykonanie aktualizacja wiersz po wierszu za pomocą kursora.