Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

supprimer les enregistrements de la table intermédiaire après qu'ils ont été ajoutés à la vraie table

Vous pourriez éventuellement faire le DELETE de votre table de staging combinée avec le OUTPUT clause. et INSERT le résultat de la OUTPUT clause dans votre table principale pour faire tout cela dans une seule instruction atomique.

OUTPUT deleted.* into dashboardtasks 

Il existe certaines restrictions répertoriées dans BOL bien que cela puisse rendre cette approche non viable.

La output_table ne peut pas :

  • Avoir activé les déclencheurs définis dessus.
  • Participer de part et d'autre d'une contrainte de clé étrangère.
  • Avoir des contraintes CHECK ou des règles activées.

Syntaxe complète de votre requête...

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