gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:11:17 28 4
gpt4 key购买 nike

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

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

我有一个包含两列的表格

dbo.HashTags

|__Id_|_name_|
| 1 | Love |

我想在 DELETE 查询上将删​​除的值插入到另一个名为 dbo.HashTagsArchive 的表中。

示例:

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

在此示例之后,我应该在 dbo.HashTagsArchive 中删除已删除的行,并且应在 dbo.HashTags 中删除带有 Id=1 的行>

我尝试了这个触发器:

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,但HashTagsArchive中没有Inserted

最佳答案

您的问题是:此触发器删除已经发生之后触发。因此 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 为您处理。

关于sql - 在使用 DELETE TRIGGER DELETE 之前将已删除的值插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018982/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com