SQL Server merge和遇到的問題Msg 10739
阿新 • • 發佈:2021-10-28
程式碼中需要預設一段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 THENhhINSERT (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中的值替換成?即可;