Váš druhý pokus nefunguje, protože na základě položky Books On-Line pro AKTUALIZACI
, SQL CE neumožňuje FROM
klauzule v aktualizačním prohlášení.
Nemám SQL Compact Edition, abych to otestoval, ale mohlo by to fungovat:
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
)
Je možné, že můžete označit JOBMAKE jako JM, aby byl dotaz o něco kratší.
UPRAVIT
Nejsem si 100% jistý omezeními SQL CE, protože se týkají otázky vznesené v komentářích (jak aktualizovat hodnotu v JOBMAKE pomocí hodnoty z JOBVISIT). Pokus o odkaz na obsah klauzule EXISTS ve vnějším dotazu není podporován v žádném dialektu SQL, se kterým jsem se setkal, ale můžete zkusit jinou metodu. Toto není testováno, ale může fungovat, protože to vypadá, že SQL CE podporuje korelované poddotazy:
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
)
Existuje však omezení. Tento dotaz selže, pokud je více než jeden řádek v JOBVISIT přeladěn pro každý řádek v JOBMAKE. Pokud to nefunguje (nebo nemůžete přímo omezit vnitřní dotaz na jeden řádek na vnější řádek), bylo by možné provést aktualizace řádek po řádku pomocí kurzoru.