SQL Server触发器更新(col)如果插入的值等于原始值,则为true还是false?

时间:2012-04-16 20:32:01

标签: sql sql-server tsql triggers

给出这个简单的示例触发器:

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。

我很抱歉,如果这是一个重复:该函数被称为更新的事实已经使我的搜索结果充满了更新状态(与更新功能非常不同),并且让我很难确定行为。

1 个答案:

答案 0 :(得分:11)

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