2012-12-24 27 views
6

出於某種原因,我無法找到所需的確切答案。我在這裏搜索了最後20分鐘。使用DELETE TRIGGER DELETE刪除刪除的值到表中

我知道這很簡單。很簡單。但我不能激活觸發器出於某種原因..

我有一個表有兩列

dbo.HashTags

|__Id_|_name_| 
| 1 | Love | 

我想刪除的值插入到另一個表在DELETE查詢上稱爲dbo.HashTagsArchive

實施例:

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

這個例子中經過我應該在dbo.HashTagsArchive刪除的行並與Id=1行應dbo.HashTags

被刪除我嘗試這樣TRIGGER:

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 

這是Deleted,但沒有Inserted行在HashTagsArchive

回答

12

您的問題是:此觸發器觸發AFTER刪除已發生。所以HashTags沒有更多的行,你可以加入!

您需要使用這個觸發器來代替:

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 

Deleted僞表包含整行(S)被刪除的 - 無需加入任何東西......

而且:這個觸發器在刪除發生後觸發 - 所以你不需要自己做任何事情,在觸發器內部 - 只需將這些信息插入到你的存檔表中 - 就這些了。其他的一切都由SQL Server爲你處理。

+0

謝謝!完美的作品! – Ofear