A quoi sert le GO ?

GO n’est pas une commande SQL. C’est une commande de l’interpréteur qu’est SSMS ou SQLcmd.
Cette commande permet de forcer l’envoi du lot de commande SQL et d’attendre le retour du serveur avant de poursuivre.

Elle est indispensable dans certains cas de figure, car le serveur ne peut pas toujours comprendre ce que l’on veut faire d’un point de vue analyse syntaxique ou objet.

Exemple :

CREATE TABLE TOTO (C INT);
CREATE VIEW TITI AS SELECT * FROM TOTO;

Renvoi systématiquement :
Msg 111, Niveau 15, État 1, Ligne 2
‘CREATE VIEW’ doit être la première instruction d’un traitement de requêtes.

Car le création de la vue se fait sur un objet qui n’existe pas à l’interprétation

Avec GO tout va bien :

CREATE TABLE TOTO (C INT);
GO
CREATE VIEW TITI AS SELECT * FROM TOTO;

Notez que GO doit toujours être sur une ligne séparée car c’est ligne à ligne qu’agit l’interpréteur de commande. Par exemple :

CREATE TABLE TOTO (C INT); GO
CREATE VIEW TITI AS SELECT * FROM TOTO;

Provoque une autre erreur :
Msg 102, Niveau 15, État 1, Ligne 1
Syntaxe incorrecte vers ‘GO’.

Msg 111, Niveau 15, État 1, Ligne 2
‘CREATE VIEW’ doit être la première instruction d’un traitement de requêtes.


--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence  * * * * *

MVP Microsoft SQL Server

2 réflexions au sujet de « A quoi sert le GO ? »

  1. Avatar de zinzinetizinzineti

    Pour le fun on peut choisir sous SSMS le caractère ou le mot séparateur de batch qu’on veut [ si on a marre des GO partout ;-) ]. c’est à dire qu’en lieu et place de « Go » on peut choisir par exemple « RUN » ou « YO » ou « ZOU » ou « YOUPI » ou « ZIVA » ;-)

    Il suffit pour celà :

    1.) d’ouvrir SSMS
    2.) allez dans le menu « Tools » > « Options » > « Query Execution »
    3.) Sous le menu « Query Execution », allez dans « SQL Server » > « General »
    4.) là, modifier le champ « Batch Separator », (la valeur par défaut de ce champ est « GO »), mettez par exemple « RUN »
    5.) et tester

    /! Attention CECI N’EST VALABLE QUE SOUS VOTRE SSMS !!!
    NE CHERCHER PAS A FAIRE LA MÊME CHOSE AVEC SQLCMD PAR EXEMPLE ça NE MARCHERA PAS !

    Donc c’est juste pour le fun ;-)

Laisser un commentaire