Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como fazer a atualização da tabela Sql Server CE de outra tabela


Sua segunda tentativa não funciona porque, com base na entrada Books On-Line para ATUALIZAÇÃO , o SQL CE não permite um FROM cláusula em uma instrução de atualização.

Eu não tenho o SQL Compact Edition para testá-lo, mas isso pode 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
             )

Pode ser que você possa alias JOBMAKE como JM para tornar a consulta um pouco mais curta.

EDITAR

Não tenho 100% de certeza das limitações do SQL CE, pois estão relacionadas à questão levantada nos comentários (como atualizar um valor no JOBMAKE usando um valor do JOBVISIT). A tentativa de fazer referência ao conteúdo da cláusula EXISTS na consulta externa não é suportada em nenhum dialeto SQL que encontrei, mas há outro método que você pode tentar. Isso não foi testado, mas pode funcionar, pois parece que o SQL CE suporta 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
                 )

Há uma limitação, no entanto. Esta consulta falhará se mais de uma linha no JOBVISIT for reajustada para cada linha no JOBMAKE. Se isso não funcionar (ou você não pode limitar diretamente a consulta interna a uma única linha por linha externa), seria possível realizar uma atualização linha por linha usando um cursor.