SQL Server 2012 - 分号上MERGE语句中的错误

时间:2016-06-12 16:47:49

标签: sql sql-server sql-server-2012

我有这个带有MERGE的SQL语句。它在SQL Server Management Studio中运行时工作正常,但是当我尝试通过计划任务调用完全相同的查询并执行它时,我看到以下错误。

有人可以帮我理解发生的事情。

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);
  

消息:java.sql.SQLException:必须终止MERGE语句   用分号(;)。

1 个答案:

答案 0 :(得分: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