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

elimine registros de la tabla de etapas después de que se hayan agregado a la tabla real

Posiblemente podrías hacer DELETE de su tabla de preparación combinada con OUTPUT cláusula. y INSERT el resultado de la OUTPUT cláusula en su tabla principal para hacer todo esto en una declaración atómica.

OUTPUT deleted.* into dashboardtasks 

Hay algunas restricciones enumeradas en BOL aunque lo que puede hacer que este enfoque sea inviable.

La tabla de salida no puede:

  • Habilitar disparadores definidos en él.
  • Participar en ambos lados de una restricción de clave externa.
  • Tener restricciones CHECK o reglas habilitadas.

Sintaxis completa para su 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
                         ))