it-swarm.com.de

Falsche Syntax bei 'GO'

Wie kann ich die folgende SQL-Anweisung in einem einzigen Befehl (Einzelausführung) über ADO.NET ausführen?

ALTER TABLE [MyTable]
    ADD NewCol INT

GO

UPDATE [MyTable] 
    SET [NewCol] = 1

Das Batch-Trennzeichen GO wird nicht unterstützt, und ohne es schlägt die zweite Anweisung fehl.

Gibt es andere Lösungen als die Verwendung mehrerer command-Ausführungen?

31
Andrew Bullock

Das Schlüsselwort GO ist nicht T-SQL, sondern ein SQL Server Management Studio-Artefakt, mit dem Sie die Ausführung einer Skriptdatei in mehreren batches.I.e trennen können. Wenn Sie eine T-SQL-Skriptdatei in SSMS ausführen, werden die Anweisungen in Batches ausgeführt, die durch das Schlüsselwort GO getrennt sind. Weitere Informationen finden Sie hier: https://msdn.Microsoft.com/en-us/library/ms188037.aspx

Wenn Sie das lesen, werden Sie sehen, dass sqlcmd und osql auch GO unterstützen.

SQL Server versteht das Schlüsselwort GO nicht. Wenn Sie also ein Äquivalent benötigen, müssen Sie die Stapel einzeln trennen und ausführen.

55
JotaBe

Entfernen Sie die GO:

String sql = "ALTER TABLE  [MyTable] ADD NewCol INT;";
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
sql = "UPDATE [MyTable] SET [NewCol] = 1";
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();

Es scheint, dass Sie die Server-Klasse dafür verwenden können. Hier ist ein Artikel:

C #: Batch-T-SQL-Skripts mit GO-Anweisungen ausführen

16
Rango

Dies kann auch passieren, wenn Ihr Batch-Separator in Ihren Einstellungen geändert wurde. Klicken Sie im SSMS auf Extras -> Optionen, und wechseln Sie zu Query Execution/SQL Server/General, um dieses Batch-Trennzeichen zu überprüfen. 

Ich hatte gerade einen Fehler mit einem Skript, das keine CR LF - Zeilenenden hatte. Das Schließen und erneutes Öffnen des Skripts scheint eine Korrektur aufzufordern. Nur noch eine Sache, auf die Sie achten sollten! 

2
Gamic

Sie erhalten diese Fehlermeldung auch, wenn Sie IF-Anweisungen verwendet und falsch geschlossen haben.

Denken Sie daran, dass Sie BEGIN/END verwenden müssen, wenn Ihre IF-Anweisung länger als eine Zeile ist.

Das funktioniert:

IF @@ROWCOUNT = 0
PRINT 'Row count is zero.'

Wenn Sie zwei Zeilen haben, sollte es so aussehen:

IF @@ROWCOUNT = 0
BEGIN
PRINT 'Row count is zero.'
PRINT 'You should probably do something about that.'
END
2
David Wilson

Kam durch das Versuchen herauszufinden, warum meine Abfrage in SSRS nicht funktionierte. Sie verwenden nicht GO in SSRS, verwenden Sie stattdessen Semikolons zwischen Ihren verschiedenen Anweisungen.

1
Vistance