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中的值替换成?即可;

浙公网安备 33010602011771号