我有一个使用MS SQL Server 2014的合并命令将两个表同步在一起。我想跟踪历史记录表中的每个更新。我在INSERT INTO
内写WHEN MATCHED
语句时收到错误。
是否可以在不使用触发器的情况下获取正在更新的行?我试图将所有操作保留在存储过程中。
Msg 102, Level 15, State 1, Line 71
Incorrect syntax near 'OUTPUT'.
Expecting AND, OR, or THEN
BEGIN TRAN;
MERGE TestTable1 AS dst
USING TestTable2 AS src
ON ( dst.ID = src.ID )
WHEN NOT MATCHED BY TARGET THEN
INSERT ( ID, LastName, FirstName, MiddleName) VALUES ( src.ID, src.LastName, src.FirstName, src.MiddleName)
WHEN MATCHED AND src.LastName <> dst.LastName
OR src.FirstName <> dst.FirstName
OR src.MiddleName <> dst.MiddleName
UPDATE SET dst.LastName = src.LastName, dst.FirstName = src.FirstName, dst.MiddleName = src.MiddleName
INSERT INTO HistoryTable (ID, LastName, FirstName, MiddleName) VALUES (dst.ID, dst.LastName, dst.FirstName, dst.MiddleName)
OUTPUT $action
, inserted.*
, deleted.*;
COMMIT TRAN;