GO (Transact-SQL)

Signalisiert das Ende eines Batches von Transact-SQL-Anweisungen an die SQL Server-Dienstprogramme.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

GO [count]

Argumente

  • count
    Eine positive ganze Zahl. Der Batch, der GO vorausgeht, wird so oft wie angegeben ausgeführt.

Hinweise

GO ist keine Transact-SQL-Anweisung; es ist ein Befehl, der von den sqlcmd- und osql-Dienstprogrammen und vom SQL Server Management Studio-Code-Editor erkannt wird.

Die SQL Server-Dienstprogramme interpretieren GO als ein Signal zum Senden des aktuellen Batches von Transact-SQL-Anweisungen an eine Instanz von SQL Server. Der aktuelle Anweisungsbatch besteht aus allen Anweisungen, die seit dem letzten GO eingegeben wurden. Wenn dies das erste GO ist, besteht er aus allen Anweisungen, die seit dem Beginn der Ad-hoc-Sitzung oder des Skripts eingegeben wurden.

Eine Transact-SQL-Anweisung kann nicht dieselbe Zeile wie ein GO-Befehl belegen. Allerdings kann die Zeile Kommentare enthalten.

Benutzer müssen die Regeln für Batches befolgen. So muss z. B. jede Ausführung einer gespeicherten Prozedur nach der ersten Anweisung in einem Batch das EXECUTE-Schlüsselwort einschließen. Der Bereich von lokalen (benutzerdefinierten) Variablen ist auf einen Batch beschränkt, auf die nicht nach einem GO-Befehl verwiesen werden kann.

USE AdventureWorks;
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello, World.'
GO -- @MyMsg is not valid after this GO ends the batch.

-- Yields an error because @MyMsg not declared in this batch.
PRINT @MyMsg
GO

SELECT @@VERSION;
-- Yields an error: Must be EXEC sp_who if not first statement in 
-- batch.
sp_who
GO

SQL Server-Anwendungen können zum Ausführen eines Batches mehrere Transact-SQL-Anweisungen an eine Instanz von SQL Server senden. Die Anweisungen im Batch werden dann in einen einzelnen Ausführungsplan kompiliert. Programmierer, die Ad-hoc-Anweisungen in den SQL Server-Dienstprogrammen ausführen oder aus Transact-SQL-Anweisungen Skripts zur Ausführung durch die SQL Server-Dienstprogramme erstellen, verwenden GO, um das Ende eines Batches zu signalisieren.

Auf den ODBC- oder OLE DB-APIs basierende Anwendungen erhalten einen Syntaxfehler, wenn sie versuchen, einen GO-Befehl auszuführen. Die SQL Server-Dienstprogramme senden nie einen GO-Befehl an den Server.

Berechtigungen

GO ist ein Dienstprogrammbefehl, für den keine Berechtigungen erforderlich sind. Der Befehl kann von jedem Benutzer ausgeführt werden.

Beispiele

Im folgenden Beispiel werden zwei Batches erstellt. Der erste Batch enthält nur eine USEAdventureWorks-Anweisung zum Festlegen des Datenbankkontexts. Die verbleibenden Anweisungen verwenden eine lokale Variable. Daher müssen alle Deklarationen von lokalen Variablen in einem einzelnen Batch gruppiert werden. Dies wird erreicht, indem ein GO-Befehl erst nach der letzten Anweisung, die auf die Variable verweist, ausgeführt wird.

USE AdventureWorks;
GO
DECLARE @NmbrContacts int
SELECT @NmbrContacts = COUNT(*)
FROM Person.Contact
PRINT 'The number of contacts as of ' +
      CAST(GETDATE() AS char(20)) + ' is ' +
      CAST(@NmbrContacts AS char (10))
GO

Siehe auch

Konzepte