给出这个简单的示例触发器:
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。
我很抱歉,如果这是一个重复:该函数被称为更新的事实已经使我的搜索结果充满了更新状态(与更新功能非常不同),并且让我很难确定行为。
答案 0 :(得分:11)
UPDATE()
函数不区分值是否已更改,仅区分列已更新。为此,您应该比较inserted
和deleted
伪表中的值。