在sqlserver中合并 - 语法不正确

shi*_*etz 2 sql sql-server merge

我尝试执行此事务:

GO
BEGIN TRAN;
MERGE A AS t 
USING B AS tmp
ON (t.domain = tmp.domain and t.link=tmp.link) 
WHEN NOT MATCHED BY A
    THEN INSERT(ipVal, domain, dateStart, dateUpdate, dateFinish, link) VALUES(tmp.ipVal, tmp.domain, tmp.dateStart, tmp.dateUpdate, tmp.dateFinish, tmp.link)
WHEN MATCHED 
    THEN UPDATE SET t.dateupdate = tmp.dateupdate
WHEN NOT MATCHED BY B
    THEN UPDATE SET t.datefinish="a"
ROLLBACK TRAN;
GO 
Run Code Online (Sandbox Code Playgroud)

我从这里获取了这段代码,但是当我尝试执行此操作时出现错误:

Incorrect syntax near 'A'
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?

Bog*_*ean 6

根据MSDN,WHEN NOT MATCHED分支的简化语法是

   [ WHEN NOT MATCHED [ BY TARGET ] [...]
        THEN <merge_not_matched> ]
    [ WHEN NOT MATCHED BY SOURCE [...]
        THEN <merge_matched> ] [ ...n ]
Run Code Online (Sandbox Code Playgroud)

解决的办法是,以取代WHEN NOT MATCHED BY AWHEN NOT MATCHED BY TARGETWHEN NOT MATCHED BY BWHEN NOT MATCHED BY SOURCE.

TARGET并且SOURCE是T-SQL关键字而不是占位符.