1

鉴于这个简单的示例触发器:

CREATE TRIGGER example_update
ON example_table
FOR UPDATE
AS BEGIN
   if update(someColumn) begin
      update example_table SET last_update_date = GETDATE() WHERE id IN (SELECT id FROM inserted);
   end
END

如果 someColumn 的旧值和 someColumn 的新值相等,update(someColumn) 返回 true 还是 false?例如,如果我运行这两个 SQL 语句:

UPDATE example_table SET someColumn=1;
UPDATE example_table SET someColumn=1;

第二个语句会触发我的触发器中的 if 块吗?

另外,如果我执行此操作,我的假设是否正确:

UPDATE example_table SET otherColumn=1;

然后我的触发器中的 update(someColumn) 将返回 false。

如果这是重复,我深表歉意:该函数被称为 update 的事实使我的搜索结果充满了更新语句(这与 update 函数非常不同),并且使我很难确定这种行为。

4

1 回答 1

12

UPDATE()函数不区分值是否已更改,仅区分列已更新。为此,您应该比较inserteddeleted伪表中的值。

于 2012-04-16T20:34:26.940 回答