出于某种原因,我找不到我需要的确切答案。我在这里搜索了最后20分钟。
我知道这很简单。非常简单。但由于某种原因,我不能解雇触发器。
我有一个包含两列的表
dbo.HashTags
|__Id_|_name_|
| 1 | Love |
我想在dbo.HashTagsArchive
查询中将已删除的值插入另一个名为DELETE
的表中。
示例:
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
行
答案 0 :(得分:14)
您的问题是:此触发器触发 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
伪表包含已删除的整行 - 无需加入任何内容......
此外:在删除发生后触发此触发器 - 因此您不需要在触发器内自行执行任何操作 - 只需将这些信息插入存档表即可 - 这就是全部。其他所有内容都由SQL Server为您处理。