2016-06-12 80 views
0

我有MERGE這個SQL語句。當我在SQL Server Management Studio中運行它時,它工作正常,但是當我嘗試通過計劃任務調用完全相同的查詢並執行它時,我看到下面的錯誤。SQL Server 2012- MERGE語句在分號上的錯誤

有人可以幫我理解發生了什麼。

MERGE TEST2 AS TARGET  
USING TEST1 AS SOURCE  
ON TARGET.ID = SOURCE.ID 
AND SOURCE.ID IS NOT NULL 
WHEN MATCHED THEN       
    UPDATE SET ID=SOURCE.ID, 
       Name= SOURCE.Name, 
       City= SOURCE.City, 
       State = SOURCE.State 

WHEN NOT MATCHED THEN 
INSERT (ID, Name, City, State) 
VALUES(SOURCE.ID, SOURCE.Name, SOURCE.City, SOURCE.State); 

Message: java.sql.SQLException: A MERGE statement must be terminated by a semi-colon (;).

+0

您的計劃任務是如何執行的?顯然通過一些Java代碼?仔細檢查你沒有遇到某種長度限制,只有部分語句傳遞給服務器。 –

+0

看起來像它通過一些java代碼執行,但沒有限制的代碼長度。 – Newbie

回答

0

如果在SSMS中運行,而不是槽與特定錯誤的應用程序意味着SQL沒有得到一個分號。爲什麼會這樣呢?運行一個分析器來查看你的應用程序發送給SQL的內容。我瘋狂的猜測是你的應用程序會削減查詢的尾部。例如,以下查詢將生成相同的錯誤:

MERGE TEST2 AS TARGET  
USING TEST1 AS SOURCE  
ON TARGET.ID = SOURCE.ID 
AND SOURCE.ID IS NOT NULL 
WHEN MATCHED THEN       
    UPDATE SET ID=SOURC