触发记录比较

时间:2014-04-11 14:03:44

标签: sql sql-server tsql triggers

我正在开发一个进程,当为表中的记录更改版本时,该进程将创建历史表。我的触发器如下。它正在工作,但它是在每次更新时更新历史表,无论值是否不同。如果ProductVersion不同,我只想写入历史表。

任何帮助都会很棒。

 CREATE TRIGGER UpdateServerControlSqlVersionHistory ON [monitor].[ServerControl]
AFTER UPDATE
 AS

 BEGIN
SET NOCOUNT ON;

INSERT INTO monitor.ServerSqlVersionHistory
SELECT i.ServerControlID, i.SqlLinkedServerName, i.ProductVersion, d.ProductVersion, GETDATE()
FROM INSERTED i
    FULL OUTER JOIN DELETED d
        ON i.ServerControlID = d.ServerControlID
END
GO

1 个答案:

答案 0 :(得分:1)

很难确定,因为我们并不确切知道您正在做什么更新,但请尝试 将该条件添加到联接中,并从FULL OUTER

切换联接
CREATE TRIGGER UpdateServerControlSqlVersionHistory ON [monitor].[ServerControl]
AFTER UPDATE
 AS

 BEGIN
SET NOCOUNT ON;

INSERT INTO monitor.ServerSqlVersionHistory
SELECT i.ServerControlID, i.SqlLinkedServerName, i.ProductVersion, d.ProductVersion, GETDATE()
FROM INSERTED i
    JOIN DELETED d
        ON i.ServerControlID = d.ServerControlID
        AND i.ProductVersion <> d.ProductVersion
END
GO