Delen via


SQL Server Utilities-instructies - GO

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

SQL Server biedt opdrachten die niet Transact-SQL instructies, maar worden herkend door de sqlcmd - en osql-hulpprogramma's en SQL Server Management Studio Code Editor. Deze opdrachten kunnen worden gebruikt om de leesbaarheid en uitvoering van batches en scripts te vergemakkelijken.

GO geeft het einde van een batch Transact-SQL instructies aan bij de SQL Server-hulpprogramma's.

Transact-SQL syntaxis-conventies

Syntax

GO [count]  

Arguments

count
Is een positief geheel getal. De batch voorafgaand aan GO voert het opgegeven aantal keren uit.

Remarks

GO is geen Transact-SQL instructie; het is een opdracht die wordt herkend door de sqlcmd - en osql-hulpprogramma's en de SQL Server Management Studio Code-editor.

SQL Server-hulpprogramma's interpreteren GO als een signaal dat ze de huidige batch met Transact-SQL-instructies moeten verzenden naar een exemplaar van SQL Server. De huidige batch met instructies bestaat uit alle opgegeven instructies sinds de laatste GO, of sinds het begin van de ad-hocsessie of het script als dit de eerste GO is.

Een Transact-SQL instructie kan niet dezelfde regel bezetten als een GO-opdracht. De regel kan echter opmerkingen bevatten.

Gebruikers moeten de regels voor batches volgen. Elke uitvoering van een opgeslagen procedure na de eerste instructie in een batch moet bijvoorbeeld het trefwoord EXECUTE bevatten. Het bereik van lokale (door de gebruiker gedefinieerde) variabelen is beperkt tot een batch en kan niet worden verwezen na een GO-opdracht.

USE AdventureWorks2022;  
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-toepassingen kunnen meerdere Transact-SQL instructies verzenden naar een exemplaar van SQL Server voor uitvoering als batch. De instructies in de batch worden vervolgens gecompileerd in één uitvoeringsplan. Programmeurs die ad-hocinstructies uitvoeren in de SQL Server-hulpprogramma's of scripts van Transact-SQL-instructies bouwen om door de SQL Server-hulpprogramma's te lopen, gebruiken GO om het einde van een batch aan te geven.

Toepassingen op basis van de ODBC- of OLE DB-API's krijgen een syntaxisfout als ze een GO-opdracht proberen uit te voeren. De SQL Server-hulpprogramma's verzenden nooit een GO-opdracht naar de server.

Gebruik geen puntkomma als instructieeindteken na GO.

-- Yields an error because ; is not permitted after GO  
SELECT @@VERSION;  
GO;  

In de SQL-queryeditor van de Microsoft Fabric-portal wordt elke SQL-instructie uitgevoerd als een onafhankelijke sessie. Sessiecontext blijft niet behouden tussen SQL-instructies. Zie SQL-queryeditor voor meer informatie.

Permissions

GO is een hulpprogrammaopdracht waarvoor geen machtigingen zijn vereist. Het kan door elke gebruiker worden uitgevoerd.

Examples

In het volgende voorbeeld worden twee batches gemaakt. De eerste batch bevat slechts een USE AdventureWorks2022 instructie om de databasecontext in te stellen. De resterende instructies maken gebruik van een lokale variabele. Daarom moeten alle declaraties van lokale variabelen in één batch worden gegroepeerd. Dit wordt gedaan door pas na de laatste instructie een GO opdracht te hebben die verwijst naar de variabele.

USE AdventureWorks2022;  
GO  
DECLARE @NmbrPeople INT  
SELECT @NmbrPeople = COUNT(*)  
FROM Person.Person;  
PRINT 'The number of people as of ' +  
      CAST(GETDATE() AS CHAR(20)) + ' is ' +  
      CAST(@NmbrPeople AS CHAR(10));  
GO  

In het volgende voorbeeld worden de instructies in de batch twee keer uitgevoerd.

SELECT DB_NAME();  
SELECT USER_NAME();  
GO 2