SQL Server merge和遇到的问题Msg 10739

代码中需要预设一段sql server merge的sql模板,搜到的大部分都是从一张表同步到另外一张表的情况;

于是模仿了oracle中 select * from dual 写了一个demo:

MERGE INTO [test] AS ht 
USING ( SELECT '88' AS code, '88' AS message, '4' AS id ) s ON ( s.id = ht.id ) 
WHEN matched THEN
UPDATE 
    SET ht.code = s.code,
    ht.message = s.message 
WHEN NOT matched THENhh
INSERT (ht.code, ht.message, ht.id)
VALUES
    (s.code, s.message,  s.id);

结果报错了,

> Msg 10739, Level 15, State 1, Server DGXDBSVR1, Procedure , Line 0
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
> [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。 (10739)

最终查到,对象有前缀就是多标识,没有就是单标识,于是尝试删掉了插入的前缀:

INSERT (code, message, id)
VALUES
    (s.code, s.message,  s.id);

就可以实现,如果目标表test中含有id等于4便更新,没有4就插入的目的;

对于jdbc用到的模板,只需要将demo中的值替换成?即可;

posted @ 2021-10-28 10:31  一人暮らしda  阅读(724)  评论(0)    收藏  举报