【发布时间】:2022-01-05 23:56:36
【问题描述】:
我正在尝试创建一个 SQL Server 触发器,当表 1 的更新发生在 val2 列中时,它会采用该值并更新 table2。我正在努力理解如何在听起来很简单的事情上正确地做到这一点。
我相信我的问题是试图设置一个实际上并非来自插入的值。 (唯一更新的值是 val2)。我不知道如何配对在哪里进行更新,而不是在更新的行上获取 ID 以与我想要更新的位置进行比较。对此的任何帮助/建议将不胜感激。以下是我当前不起作用的触发器。
CREATE TRIGGER Pull_ID on table1
AFTER UPDATE
AS
BEGIN
@id_ = id from inserted
@val2_ = val2 from inserted
UPDATE table2
SET val2 = @val2_
FROM
WHERE table2.id = @id_
END
【问题讨论】:
-
触发器是高度特定于供应商的 - 所以请添加一个标签来指定您使用的是
mysql、postgresql、sql-server、oracle还是db2- 或者完全是别的东西。 -
添加了标签,谢谢
-
您的触发器有 MAJOR 缺陷,您似乎认为它会被 每行调用一次 - 事实并非如此。触发器将每条语句触发一次,因此如果您的
INSERT导致此触发器触发插入 25 行,您将触发触发器一次和@987654329 @ 伪表将包含 25 行。您的代码将从Inserted中选择这 25 行中的哪一行?它是不确定的,您将获得任意行,而您将忽略所有其他行。您需要重写触发器以考虑到这一点! -
@marc_s 我明白你在说什么。你在任何地方都有这样的例子吗?我想使用 WHERE 子句尝试确定它,但我不明白如何在线查找示例。
-
查看我的回复 - 希望对您有所帮助
标签: sql sql-server triggers