2016-06-12 5 views
0

Ich habe diese SQL-Anweisung mit MERGE. Es funktioniert einwandfrei, wenn ich es in SQL Server Management Studio ausführe, aber wenn ich meine Anwendung versuche, die genau gleiche Abfrage über eine geplante Aufgabe aufzurufen und sie auszuführen, sehe ich den folgenden Fehler.SQL Server 2012 - Fehler in der MERGE-Anweisung auf Semikolon

Kann mir bitte jemand helfen zu verstehen, was passiert.

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

Wie wird Ihre geplante Aufgabe ausgeführt? Offenbar durch etwas Java-Code? Überprüfen Sie, dass Sie nicht in eine Art Längenbeschränkung geraten, bei der nur ein Teil der Anweisung an den Server übergeben wird. –

+0

Sieht so aus, als würde es durch einen Java-Code ausgeführt, aber es gibt keine Beschränkung für die Länge des Codes. – Newbie

Antwort

0

Wenn es in SSMS läuft und die Anwendung nicht mit diesem speziellen Fehler Trog bedeutet, dass SQL kein Semikolon bekommt. Warum das passiert? Führen Sie einen Profiler aus, um zu sehen, was Ihre Anwendung an SQL sendet. Meine wilde Vermutung wäre, dass Ihre Anwendung den Schwanz Ihrer Abfrage schneidet. Zum Beispiel folgende Abfrage erzeugt den gleichen Fehler:

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