【发布时间】:2017-02-20 15:59:02
【问题描述】:
我有这个触发器
ALTER TRIGGER [dbo].[tInsertTaskFromOpportunityReassignment]
ON [dbo].[OpportunityBase]
FOR UPDATE
AS
BEGIN
IF UPDATE(owninguser)
BEGIN
-- do the task
END
END
我只想在 owninguser 实际发生变化的情况下执行该任务。我该如何确定?
谢谢
【问题讨论】:
-
您需要在
deleted表和inserted表之间比较owninguser的值。但是,并不是每个语句触发触发器,而不是每行触发,这意味着如果您更新多行,触发器只会触发一次。 -
AFAIK 它甚至适用于多个更新的行。
-
我错过了
e:应该是note that triggers are...。无论如何,它确实适用于更新的多行,但也有可能并非所有更新的行在更新后都会在特定列中具有不同的值。 -
触发器只能用于非常简单的任务(例如将日期时间戳写入审计字段)。触发 INSERT 语句的进程最好知道 owninguser 的值是否发生了变化,因此应该决定触发一个额外的任务;特别是如果该任务很复杂/需要长时间运行。
标签: sql sql-server triggers