我正在尝试使用时间戳更新名为LastUpdate
的字段,只要其他两个字段中的任何一个更改为与原始值不同的值。这两列是LoadDate
和CompleteDate
。我已经工作的触发器,但由于我每次运行我的进程时都在更新行,无论日期是否更改,它都会更新时间戳。我需要进行比较,看看旧的LoadDate
是否与新的LoadDate
不同,或旧的CompleteDate
是否与新的CompleteDate
不同。这是我的触发器:
CREATE TRIGGER time_stamp
ON my_table
FOR UPDATE, INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @LoadDate datetime, @CompleteDate datetime
SELECT @LoadDate = LoadDate, @CompleteDate = CompleteDate FROM my_table
UPDATE my_table
SET LastUpdate = GETDATE()
WHERE LoadDate = @LoadDate
AND CompleteDate = @CompleteDate
END
答案 0 :(得分:0)
您的触发器中只需要一个语句。这样的事应该做:
update MT
set LastUpdate = GetDate()
from My_Table as MT inner join
-- Inner join with inserted to pick up only those rows inserted or updated.
inserted as i on i.YourIdColumn = MT.YourIdColumn left outer join
-- Left outer join with deleted to pick up the "before" values if this is an UPDATE.
deleted as d on d.YourIdColumn = MT.YourIdColumn
where
-- LoadDate has changed or this is an INSERT.
( i.LoadDate <> d.LoadDate or d.LoadDate is NULL ) or
-- CompleteDate has changed or this is an INSERT.
( i.CompleteDate <> d.CompleteDate or d.CompleteDate is NULL )
请注意,这是执行设置操作。影响多行的INSERT或UPDATE将导致触发器触发并处理所有受影响的行。