INSERT删除值入表中删除触发器删除之前(INSERT deleted values into a

2019-07-17 13:17发布

出于某种原因,我无法找到我需要的确切答案。 我在这里搜索在最后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 ,但没有Inserted该行HashTagsArchive

Answer 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为您处理。



文章来源: INSERT deleted values into a table before DELETE with a DELETE TRIGGER