【发布时间】:2021-03-25 19:43:09
【问题描述】:
在搜索了很多页面后,我仍然找不到关于在同一个表中重新插入已删除行的答案 - 而不是另一个表。
我有一个名为 timetable 的表,其主键由 3 列 Schoolcode, Year, Term 组成。
由于某种原因,我需要将已删除的行插入到同一个表中。
我得到了错误
违反主键约束
使用以下触发器
ALTER TRIGGER [dbo].[AFTER_delete_]
ON [dbo].timetable
AFTER delete
AS
BEGIN
IF EXISTS (SELECT * FROM deleted)
BEGIN
INSERT INTO timetable
SELECT *
FROM deleted A
WHERE NOT EXISTS (SELECT 1 FROM timetable B
WHERE B.Schoolcode = A.Schoolcode
AND B.Year = A.Year
AND B.Term = A.Term);
END
END
【问题讨论】:
-
SQL Server 2008 和 2008 R2 一年多前就已结束生命周期,现在完全不受支持 -和 SQL Server 2005 甚至还有几年......您应该真正考虑升级到受支持的版本。
-
需要提供表结构
-
这听起来是个糟糕的主意,但我知道要改变你的道路绝非易事。首先,我建议您在删除必须存在且永远不应该删除的行时简单地抛出一个错误。或者,使用而不是触发器来“过滤”删除,这样那些“必需”的行就不会被实际删除。
-
@SM或者你能用而不是触发器重写我的代码
-
也许-但这不是免费的代码编写服务,您也没有完全解释什么可以删除,什么不能删除的规则。在我看来,您的目标只是不允许任何删除。如果是这样,我们通过设置适当的权限来做到这一点。或者,如果有任何行受到删除的影响,您只需在删除触发器中抛出一个错误。除了验证已删除表中是否存在行之外,我不明白为什么您需要任何条件逻辑。
标签: sql-server triggers insert