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

INSERT gelöschte Werte in eine Tabelle vor DELETE mit einem DELETE TRIGGER

Ihr Problem ist:Dieser Trigger wird AFTER ausgelöst die Löschung ist bereits erfolgt . Es gibt also keine Zeile mehr in HashTags dem Sie beitreten könnten!

Sie müssen stattdessen diesen Trigger verwenden:

ALTER TRIGGER [dbo].[HashTags_BeforeDelete]
    ON [dbo].[HashTags]
    FOR DELETE
AS
  BEGIN
    INSERT INTO HashTagsArchive(Id, HashTagId, delete_date)
       SELECT 
           d.Id, d.HashTagId, GETUTCDATE() 
       FROM deleted d 
  END
GO

Der Deleted Pseudo-Tabelle enthält die ganze Zeile(n) die gelöscht wurden - keine Notwendigkeit, irgendetwas beizutreten ...

Außerdem:Dieser Trigger wird ausgelöst, nachdem das Löschen stattgefunden hat - Sie müssen also innerhalb des Triggers nichts selbst tun - fügen Sie einfach diese Informationsbits in Ihre Archivtabelle ein - das ist alles. Alles andere erledigt SQL Server für Sie.