您可以在MS SQL中使用Merge命令运行多个操作吗?

时间:2018-05-03 22:20:29

标签: sql sql-server

我有一个使用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;

0 个答案:

没有答案