9

出于某种原因,我找不到我需要的确切答案。我在这里搜索了最后20分钟。

我知道这很简单。非常简单。但是由于某种原因我无法触发触发器..

我有一个有两列的表

dbo.HashTags

|__Id_|_name_|
|  1  | Love |

我想将删除的值插入另一个查询调用dbo.HashTagsArchive的表中DELETE

例子:

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

在这个例子之后,我应该有删除dbo.HashTagsArchive的行,并且Id=1应该删除的行dbo.HashTags

我试过这个触发器:

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但没有InsertedHashTagsArchive

4

1 回答 1

16

您的问题是:此触发器在删除已经发生触发。所以没有更多的行可以加入!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伪表包含已删除的整- 无需加入任何内容......

另外:这个触发器在删除发生后触发——所以你不需要自己做任何事情,在触发器内部——只需将这些信息位插入到你的存档表中——就是这样。其他一切都由 SQL Server 为您处理。

于 2012-12-24T08:34:52.157 回答