【发布时间】:2021-03-16 18:52:55
【问题描述】:
正如标题所述,当从 Table1 中删除一行时,我正在尝试使用触发器来更新 Table2 中的值。我的代码如下所示:
CREATE TRIGGER TRG_Table1_DEL
ON Table1
FOR DELETE
AS
UPDATE Table2 SET
FK_Table1ID = NULL
WHERE FK_Table1ID = (SELECT Table1ID FROM DELETED)
- 我遇到的第一个错误是 UPDATE 命令,它指出: “'UPDATE' 附近的语法不正确。需要 EXTERNAL。
- 第二个错误 与我要访问的 DELETED 表一起使用。这说明 "无效的对象名称'DELETED'。
总的来说,我只是想模仿一个将列设置为空的约束(ON DELETE SET NULL)。我这样做是因为我收到一条错误消息,提示我在尝试添加约束时可能会导致多个循环或级联路径。
对于我的代码,我基于this 答案。
【问题讨论】:
-
请注意,您需要处理
Deleted可能有多行的事实,即这个WHERE FK_Table1ID = (SELECT Table1ID FROM DELETED)应该是这个WHERE FK_Table1ID IN (SELECT Table1ID FROM DELETED) -
您可能还应该将
SET NOCOUNT ON;和IF(NOT EXISTS(SELECT 1 FROM deleted)) RETURN;添加到触发器中。小提示:如果您有 FK 循环,则很有可能您的数据库设计有问题。并非总是如此,只是需要考虑一下。 -
我不明白您如何使用您向我们展示的代码获得第一个错误。你确定这是整个代码吗?
标签: sql sql-server triggers sql-update constraints