【发布时间】:2014-02-05 17:54:30
【问题描述】:
每当其他 2 个字段中的任何一个更改为与原始值不同的值时,我都会尝试使用时间戳更新名为 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
【问题讨论】:
-
inserted和deleted是表,因此它们可以表示集合操作的结果。假设触发器总是只包含一行,而设计触发器通常是一个糟糕的计划。您可以使用 比较 before 和 after 值并更新正确的行。 This 提供介绍。
标签: sql sql-server-2008 triggers