由于某种原因,我找不到我需要的确切答案。我在这里搜索了最后20分钟。
我知道这很简单。很简单。但是由于某种原因,我无法触发扳机。
我有两列的桌子
dbo.HashTags
|__Id_|_name_| | 1 | Love |
我想将已删除的值插入到另一个dbo.HashTagsArchive在DELETE查询中调用的表中。
dbo.HashTagsArchive
DELETE
例子:
DELETE FROM [dbo].[HashTags] WHERE Id=1
在此示例之后,我应该具有已删除的行,dbo.HashTagsArchive并且具有的行Id=1应被删除dbo.HashTags
Id=1
我尝试了这个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
Deleted
Inserted
HashTagsArchive
您的问题是:删除 已发生* 后 ,此触发器将触发。因此,您无需再加入任何行! *HashTags
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为您处理。