Ofe*_*ear 8 sql t-sql sql-server triggers sql-delete
由于某种原因,我无法找到我需要的确切答案.我在这里搜索了最后20分钟.
我知道这很简单.非常简单.但出于某种原因我无法触发触发器..
我有一个有两列的表
dbo.HashTags
|__Id_|_name_|
| 1 | Love |
Run Code Online (Sandbox Code Playgroud)
我想将删除的值插入另一个dbo.HashTagsArchive
在DELETE
查询上调用的表中.
例:
DELETE FROM [dbo].[HashTags] WHERE Id=1
Run Code Online (Sandbox Code Playgroud)
这个例子后,我应该有删除的行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
Run Code Online (Sandbox Code Playgroud)
它已经到了,Deleted
但没有Inserted
排HashTagsArchive
mar*_*c_s 14
你的问题是:这个触发器在删除已经发生之后触发.所以没有更多的行可以加入!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
Run Code Online (Sandbox Code Playgroud)
该Deleted
伪表包含整行(S)已删除的-无需加入任何东西...
另外:在删除发生后触发此触发器 - 因此您不需要在触发器内自行执行任何操作 - 只需将这些信息插入存档表即可 - 这就是全部.其他所有内容都由SQL Server为您处理.
归档时间: |
|
查看次数: |
18606 次 |
最近记录: |