Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Datensätze aus der Staging-Tabelle löschen, nachdem sie der realen Tabelle hinzugefügt wurden

Eventuell könntest du das DELETE machen aus Ihrer Staging-Tabelle kombiniert mit OUTPUT Klausel. und INSERT das Ergebnis von OUTPUT -Klausel in Ihre Haupttabelle, um dies alles in einer atomaren Anweisung zu erledigen.

OUTPUT deleted.* into dashboardtasks 

Es gibt einige Einschränkungen, die in BOL aufgeführt sind was diesen Ansatz jedoch möglicherweise unbrauchbar macht.

Die output_table kann nicht:

  • Haben Sie aktivierte Trigger darauf definiert.
  • Nehmen Sie an beiden Seiten einer Fremdschlüsselbeschränkung teil.
  • Haben CHECKconstraints oder aktivierte Regeln.

Vollständige Syntax für Ihre Abfrage...

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