Instructions d’utilitaires SQL Server - GO

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPoint de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

SQL Server fournit des commandes qui ne sont pas des instructions Transact-SQL, mais qui sont reconnues par les utilitaires sqlcmd et osql, ainsi que l’éditeur de code SQL Server Management Studio. Ces commandes facilitent la lisibilité et l'exécution de lots et de scripts.

GO signale la fin d’un lot d’instructions Transact-SQL aux utilitaires SQL Server.

Conventions de la syntaxe Transact-SQL

Syntaxe

GO [count]  

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

count
Entier positif. Le lot qui précède GO sera exécuté le nombre spécifié de fois.

Notes

GO n’est pas une instruction Transact-SQL, mais une commande reconnue par les utilitaires sqlcmd et osql, ainsi que l’éditeur de code SQL Server Management Studio.

Les utilitaires SQL Server interprètent GO comme le signal qu’ils doivent envoyer le lot actuel d’instructions Transact-SQL à une instance de SQL Server. Le traitement en cours se compose de toutes les transactions entrées depuis la dernière commande GO ou depuis le début de la session ou du script approprié s'il s'agit de la première commande GO.

Une instruction Transact-SQL ne peut pas se trouver sur la même ligne qu’une commande GO. Toutefois, la ligne peut contenir des commentaires.

Les utilisateurs doivent se conformer aux règles en vigueur concernant les traitements. Par exemple, toute exécution d'une procédure stockée faisant suite à la première instruction d'un lot doit inclure le mot clé EXECUTE. La portée des variables locales (personnalisées) se limite à un traitement et il est impossible d'y faire référence après une commande GO.

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  

Les applications SQL Server peuvent envoyer plusieurs instructions Transact-SQL à une instance de SQL Server en vue de leur exécution sous forme de traitement. Les instructions du traitement sont ensuite compilées dans un plan d'exécution unique. Les programmeurs qui exécutent des instructions appropriées dans les utilitaires SQL Server ou élaborent des scripts d’instructions Transact-SQL à exécuter par le biais des utilitaires SQL Server, utilisent la commande GO pour signaler la fin d’un lot.

Les applications basées sur ODBC ou sur les API OLE DB reçoivent une erreur de syntaxe s'ils tentent d'exécuter une commande GO. Les utilitaires SQL Server n'envoient jamais de commande GO au serveur.

N'utilisez pas un point-virgule comme terminateur d'instruction après GO.

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

Dans l’éditeur de requête SQL du portail Microsoft Fabric, chaque instruction SQL s’exécute en tant que session indépendante. Le contexte de session ne persiste pas dans les instructions SQL. Pour plus d’informations, consultez Éditeur de requête SQL.

Autorisations

GO est une commande d'utilitaire qui ne nécessite pas d'autorisation. Elle peut être exécutée par tout utilisateur.

Exemples

L'exemple suivant crée deux traitements. Le premier lot contient uniquement une instruction USE AdventureWorks2022 pour définir le contexte de la base de données. Les autres instructions utilisent une variable locale. Ainsi, toutes les déclarations de variables locales doivent être groupées en un seul traitement. Pour cela, aucune commande GO n'est utilisée avant la dernière instruction qui fait référence à la variable.

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  

L'exemple suivant exécute les instructions dans le lot à deux reprises.

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