Ваша вторая попытка не работает, потому что, основываясь на записи Книги в Интернете для UPDATE , 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, чтобы сделать запрос немного короче.
EDIT
Я не уверен на 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.
Если это не работает (или вы не можете просто ограничить внутренний запрос одной строкой на внешнюю строку), можно будет выполнить построчное обновление с помощью курсора.