Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

eliminare i record dalla tabella di staging dopo che sono stati aggiunti alla tabella reale

Forse potresti fare il DELETE dalla tua tabella di staging combinato con il OUTPUT clausola. e INSERT il risultato dell'OUTPUT clausola nella tabella principale per fare tutto questo in un'unica istruzione atomica.

OUTPUT deleted.* into dashboardtasks 

Esistono alcune restrizioni elencate in BOL sebbene ciò possa rendere questo approccio impraticabile.

La tabella_output non può:

  • Avere attivato trigger definiti su di esso.
  • Partecipa su entrambi i lati del vincolo di chiave esterna.
  • Avere CHECKconstraints o regole abilitate.

Sintassi completa per la tua query...

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
                         ))