假设我有一张这样的表:
CREATE TABLE [A]
(
[X] INT,
[Y] INT,
[Z] INT
)
..具有而不是更新触发器。如果我在此表中插入一行:
INSERT INTO [A]
SELECT 1, 1, 1
然后我用这样的代码点击更新触发器:
UPDATE [A]
SET [X] = 2
WHERE [X] = 1
我最终会得到一个[已删除]表格,如下所示:
X:1, Y:1, Z:1
我最终会得到一个像这样的[inserted]表:
X:2, Y:1, Z:1
有没有办法确定只有X实际设置?换句话说,我如何区分:
UPDATE [A]
SET
[X] = 2,
[Y] = 1,
[Z] = 1
WHERE [X] = 1
......以及上面的陈述?
注意: SQL Server 2008
答案 0 :(得分:2)
在触发器中,您可以添加WHERE子句来比较旧值和新值,并忽略不变的行。
您可以使用函数UPDATE()
但如果旧值和新值相同,它仍然可以为true。它不太可靠。
但是,无法确定触发SET
调用的UPDATE
子句中的实际列。也就是说,这些与触发器完全相同
UPDATE [A]
SET
[X] = 2,
[Y] = 1,
[Z] = 1
WHERE [X] = 1
UPDATE [A]
SET [X] = 2
WHERE [X] = 1