Votre deuxième tentative ne fonctionne pas car, d'après l'entrée Books On-Line pour MISE À JOUR
, SQL CE n'autorise pas un FROM
clause dans une instruction de mise à jour.
Je n'ai pas SQL Compact Edition pour le tester, mais cela pourrait fonctionner :
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
)
Il se peut que vous puissiez utiliser l'alias JOBMAKE en tant que JM pour raccourcir légèrement la requête.
MODIFIER
Je ne suis pas sûr à 100% des limitations de SQL CE en ce qui concerne la question soulevée dans les commentaires (comment mettre à jour une valeur dans JOBMAKE en utilisant une valeur de JOBVISIT). Tenter de faire référence au contenu de la clause EXISTS dans la requête externe n'est pris en charge dans aucun dialecte SQL que j'ai rencontré, mais il existe une autre méthode que vous pouvez essayer. Ceci n'a pas été testé mais peut fonctionner, car il semble que SQL CE supporte les sous-requêtes corrélées :
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
)
Il y a cependant une limite. Cette requête échouera si plus d'une ligne dans JOBVISIT est réajustée pour chaque ligne dans JOBMAKE. Si cela ne fonctionne pas (ou si vous ne pouvez pas limiter directement la requête interne à une seule ligne par ligne externe), il serait possible d'effectuer une mise à jour ligne par ligne à l'aide d'un curseur.