小编典典

在使用DELETE TRIGGER进行DELETE之前将已删除的值插入表中

sql

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

我知道这很简单。很简单。但是由于某种原因,我无法触发扳机。

我有两列的桌子

dbo.HashTags

|__Id_|_name_|
|  1  | Love |

我想将已删除的值插入到另一个dbo.HashTagsArchiveDELETE查询中调用的表中。

例子:

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


阅读 189

收藏
2021-05-05

共1个答案

小编典典

您的问题是:删除 已发生* ,此触发器将触发。因此,您无需再加入任何行! *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为您处理。

2021-05-05