2016-06-12 42 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 
関連する問題