【发布时间】:2018-04-24 13:13:39
【问题描述】:
我正在使用after delete 触发器,触发器的作用是在删除另一个行时更新一行;但问题是,我更新行的方式与已删除行获得相同的键:但由于after delete 触发器保留了假定的已删除行,并且由于键违规,我无法更新另一行,是有什么方法可以明确删除该行并然后触发触发器(我不需要回滚)
所以这是我的触发器:
CREATE TRIGGER REORDONNE
AFTER DELETE ON TEST1_TEST2
AS
BEGIN
DECLARE @oldOrder int
SELECT @oldOrder = ListOrder FROM deleted
UPDATE TEST1_TEST2
SET ListOrder=ListOrder-1
WHERE ListOrder > @oldOrder
END;
我的表 TEST1_TEST2 是这样的:
我的表的KEY是(LONSId,LOId,ListOrder)
然后我执行这个请求:
从 TEST1_TEST2 中删除 其中 NSId=13 和 Id=1
问题是当我尝试删除第 4 行时,触发器将尝试更新第 5 行并将 ListOrder 的值更改为 1,但我收到 KEY 错误,因为这 2 行将具有相同的键说:
Msg 2627,Niveau 14,État 1,Procédure REORDONNE,Ligne 19
违反约束唯一键“IX_TEST1_TEST2”。 Impossible d'insérer une clé en double dans l'objet 'dbo.TEST1_TEST2'。
我希望这足够清楚
【问题讨论】:
-
请向我们展示您的查询
-
你的问题好像少了点什么,你能猜到是什么吗?
-
您可能还想重新考虑您的声明的措辞。一个很长的句子只会让人感到困惑和难以阅读。
-
分享表结构、样本数据、预期结果和你目前的工作。
-
我做了,希望它更清楚
标签: sql sql-server triggers