1. 程式人生 > 其它 >SQL Server merge和遇到的問題Msg 10739

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