4

我執行在SQL Server 2008中的以下合併聲明:MERGE語句錯誤2008

MERGE 
PopulationData AS a 
USING ImagesData AS b 
ON a.ID = b.ID 
WHEN MATCHED THEN 
UPDATE SET a.SURNAME = 'joe123' 
WHEN NOT MATCHED THEN INSERT(a.ID,a.SURNAME) 
VALUES (12454,'joe123'); 

我有以下錯誤:

Msg 156, Level 15, State 1, Line 2 
Incorrect syntax near the keyword 'AS'. 

誰能告訴我哪裏有語法錯誤。

+0

如果您在MERGE關鍵字前添加分號會發生什麼? MERGE是堅持在T-SQL批處理中作爲**第一條語句**的那些語句之一......也許您在此之前還有其他語句? –

+1

感謝marc_s,這是我在sql server management studio 2008上執行查詢的問題,但我連接到另一臺服務器上的sql server 2005數據庫。現在它是固定的。 – Joe123

回答

9

在解析SQL Management Studio中查詢給我下面的錯誤:

Msg 10739, Level 15, State 1, Line 7 The insert column list used in the MERGE statement cannot contain multi-part identifiers. Use single part identifiers instead.

然後我刪除標識...

MERGE 
PopulationData AS a 
USING ImagesData AS b 
ON a.ID = b.ID 
WHEN MATCHED THEN 
UPDATE SET a.SURNAME = 'joe123' 
WHEN NOT MATCHED THEN INSERT(ID,SURNAME) 
VALUES (12454,'joe123'); 

...和查詢成功解析。因此,語法錯誤幾乎肯定不是來自您的MERGE語句。你真的只是執行你發佈的聲明,還是它是一個更大的腳本或過程的一部分?如果雙擊錯誤消息,它應該突出顯示語法錯誤所在的行(至少在SQL 2008中)。

更新:我注意到你已經標記了SQL 2005和2008的問題,但MERGE僅在SQL 2008中受支持。解析SQL 2005下的查詢給出了語法錯誤。

+0

感謝您的回覆。這是查詢,我正在執行,當雙擊錯誤消息它突出顯示行「PopulationData AS a」 – Joe123

+0

如果PopulationData包含其他非空字段,這會導致此錯誤? – Joe123

+0

它看起來像你正在SQL 2005數據庫中執行查詢。 – Pondlife

0

問題是我在sql server management studio 2008上執行查詢,但我連接到另一臺服務器上的sql server 2005數據庫。現在它是固定的

+0

那麼你應該接受Pondlife的回答。 –