sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo actualizar la tabla Sql Server CE desde otra tabla

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.