Вторият ви опит не работи, защото въз основа на записа Книги онлайн за АКТУАЛИЗАЦИЯ
, SQL CE не позволява FROM
клауза в израз за актуализиране.
Нямам SQL Compact Edition, за да го тествам, но това може да работи:
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
)
Може да се окаже, че можете да псевдоним JOBMAKE като JM, за да направите заявката малко по-кратка.
РЕДАКТИРАНЕ
Не съм 100% сигурен в ограниченията на SQL CE, тъй като те са свързани с въпроса, повдигнат в коментарите (как да актуализирам стойност в JOBMAKE, използвайки стойност от JOBVISIT). Опитът да се препрати към съдържанието на клаузата EXISTS във външната заявка не се поддържа в нито един SQL диалект, който съм срещал, но има друг метод, който можете да опитате. Това не е тествано, но може да работи, тъй като изглежда, че SQL CE поддържа корелирани подзаявки:
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
)
Има обаче ограничение. Тази заявка ще бъде неуспешна, ако повече от един ред в JOBVISIT бъде пренастроен за всеки ред в JOBMAKE. Ако това не работи (или не можете директно да ограничите вътрешната заявка до един ред на външен ред), би било възможно да се извърши актуализация ред по ред с помощта на курсор.