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

excluir registros da tabela de preparo depois que eles foram adicionados à tabela real


Possivelmente você poderia fazer o DELETE da sua tabela de preparação combinada com o OUTPUT cláusula. e INSERT o resultado do OUTPUT cláusula em sua tabela principal para fazer tudo isso em uma instrução atômica.
OUTPUT deleted.* into dashboardtasks 

Existem algumas restrições listadas em BOL embora o que pode tornar esta abordagem inviável.

A tabela_saída não pode:
  • Ative acionadores definidos nele.
  • Participe em ambos os lados de uma restrição de chave estrangeira.
  • Ter restrições CHECK ou regras ativadas.

Sintaxe completa para sua consulta...
DELETE FROM staggingtasks
OUTPUT DELETED.[tour],
       DELETED.tourname,
       DELETED.[taskname],
       DELETED.[deptdate],
       DELETED.[tasktype],
       DELETED.[desc],
       DELETED.[duedate],
       DELETED.[compdate],
       DELETED.[comments],
       DELETED.[agent],
       DELETED.[compby],
       DELETED.[graceperiod],
       DELETED.completed,
       DELETED.canceled
INTO dashboardtasks
WHERE  NOT EXISTS(SELECT *
                  FROM   dashboardtasks
                  WHERE  ( staggingtasks.tour = dashboardtasks.tour
                           and staggingtasks.taskname = dashboardtasks.taskname
                           and staggingtasks.deptdate = dashboardtasks.deptdate
                           and staggingtasks.duedate = dashboardtasks.duedate
                           and staggingtasks.tourname = dashboardtasks.tourname
                         ))