2012-12-24 7 views
6

Aus irgendeinem Grund kann ich nicht die genaue Antwort finden, die ich brauche. Ich habe hier nach 20 Minuten gesucht.INSERT gelöschte Werte in eine Tabelle vor DELETE mit einem DELETE TRIGGER

Ich weiß, es ist einfach. Sehr einfach. Aber ich kann nicht den Abzug aus irgendeinem Grunde schießen ..

Ich habe eine Tabelle mit zwei Spalten

dbo.HashTags

|__Id_|_name_| 
| 1 | Love | 

Ich mag die gelöschten Werte in einer anderen Tabelle einfügen dbo.HashTagsArchive auf einer DELETE Abfrage aufgerufen.

Beispiel:

DELETE FROM [dbo].[HashTags] WHERE Id=1 

Nach diesem Beispiel I die gelöschten Zeile in dbo.HashTagsArchive und die Zeile mit Id=1 sollte gelöscht werden in dbo.HashTags

ich versuchte, diesen TRIGGER haben sollte:

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

Es wird Deleted, aber keine Inserted Zeile in der HashTagsArchive

Antwort

12

Ihr Problem ist: Dieser Auslöser löst NACH die Löschung ist bereits passiert. Es gibt also keine Zeile in HashTags, an der Sie teilnehmen könnten!

Sie müssen stattdessen diese 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 

Die Deleted Pseudo-Tabelle enthält die ganze Zeile (n), die gelöscht wurden - keine Notwendigkeit, auf irgendetwas zu verbinden ...

Auch : Dieser Trigger wird ausgelöst, nachdem der Löschvorgang abgeschlossen wurde. Sie müssen also nichts mehr tun, sondern nur die Informationen in die Archivtabelle einfügen - das ist alles. Alles andere wird von SQL Server für Sie erledigt.

+0

Danke! Funktioniert perfekt! – Ofear