Su segundo intento no funciona porque, según la entrada Books On-Line para ACTUALIZAR
, SQL CE no permite un FROM
cláusula en una declaración de actualización.
No tengo SQL Compact Edition para probarlo, pero esto podría funcionar:
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
)
Puede ser que pueda alias JOBMAKE como JM para hacer la consulta un poco más corta.
EDITAR
No estoy 100 % seguro de las limitaciones de SQL CE relacionadas con la pregunta planteada en los comentarios (cómo actualizar un valor en JOBMAKE usando un valor de JOBVISIT). Intentar hacer referencia al contenido de la cláusula EXISTS en la consulta externa no es compatible con ningún dialecto de SQL que haya encontrado, pero hay otro método que puede probar. Esto no se ha probado pero puede funcionar, ya que parece que SQL CE admite subconsultas correlacionadas:
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
)
Sin embargo, hay una limitación. Esta consulta fallará si se vuelve a sintonizar más de una fila en JOBVISIT para cada fila en JOBMAKE. Si esto no funciona (o no puede limitar directamente la consulta interna a una sola fila por fila externa), sería posible llevar a cabo una actualización fila por fila usando un cursor.