485 votes

Quelle est l'utilité de GO dans SQL Server Management Studio et Transact SQL ?

SQL Server Management Studio insère toujours une commande GO lorsque je crée une requête en utilisant le menu de clic droit "script As". Pourquoi ? Que fait réellement la commande GO ?

39 votes

@ChrisF -- ce n'est pas un doublon, bien que la réponse acceptée réponde également à cette question. Cette question concerne l'utilisation de "GO" dans une transaction - il s'avère simplement que ce n'est pas vraiment une commande SQL. Cette question est beaucoup plus générale et tente de fournir une réponse définitive aux questions concernant la commande GO dans SSMS.

4 votes

Jetez également un coup d'œil à ce lien : À quoi servent les déclarations de mise en lots ?

0 votes

Documentation Microsoft : Déclarations des utilitaires du serveur SQL - GO : Le lot précédant GO sera exécuté le nombre de fois spécifié.

357voto

SQLMenace Points 68670

Il s'agit d'un terminateur de lot, vous pouvez cependant le modifier comme vous le souhaitez. alt text

105 votes

Gbn, faites-le SELECT et regardez ce qui se passe :-)

20 votes

Merci ! Mais alors, quel est l'intérêt de la déclaration GO ? Cela peut paraître stupide, mais que signifie "lot de code" ? msdn dit après GO que la durée de vie des variables expire. Cela n'a rien à voir avec l'engagement de la transaction, n'est-ce pas ? Y a-t-il des circonstances où je devrais garder l'instruction GO dans mes scripts ?

4 votes

Il signifie que tous les T-SQL qui le précèdent seront exécutés "en une fois". D'après ce que je comprends, il est interchangeable avec un point-virgule (OLEDB/Oracle). Par exemple, si vous avez un grand post-déploiement script, une déclaration GO entre les lignes peut aider la mémoire utilisée dans le script.

347voto

MicSim Points 12980

Depuis Management Studio 2005, il semble que vous puissiez utiliser GO avec un int paramètre, comme :

INSERT INTO mytable DEFAULT VALUES
GO 10

L'opération ci-dessus insérera 10 lignes dans mytable . D'une manière générale, GO exécutera les commandes sql correspondantes n temps .

7 votes

La simplicité est la sophistication ultime. Leonardo Da Vinci

3 votes

Que voulez-vous dire par "commandes sql connexes" ? S'agit-il de la commande ci-dessus ? Toutes les commandes ci-dessus ? Les commandes ci-dessus jusqu'au GO précédent s'il y en a un ?

0 votes

Toutes les commandes jusqu'à la précédente GO .

256voto

tvanfosson Points 268301

La commande GO n'est pas une instruction Transact-SQL, mais une commande spéciale reconnue par plusieurs utilitaires MS, dont l'éditeur de code SQL Server Management Studio.

La commande GO est utilisée pour regrouper les commandes SQL en lots qui sont envoyés ensemble au serveur. Les commandes incluses dans le lot, c'est-à-dire l'ensemble des commandes depuis la dernière commande GO ou le début de la session, doivent être logiquement cohérentes. Par exemple, vous ne pouvez pas définir une variable dans un lot et l'utiliser ensuite dans un autre, car la portée de la variable est limitée au lot dans lequel elle est définie.

Pour plus d'informations, voir http://msdn.microsoft.com/en-us/library/ms188037.aspx .

54 votes

Dans quelle situation le fait de regrouper des choses avec GO réellement utile ?

6 votes

5 votes

Donc si une déclaration dans le lot échoue, toutes les déclarations échouent ?

45voto

gbn Points 197263

GO n'est pas un mot clé SQL.

Il s'agit d'un séparateur de lots utilisé par les outils clients (comme SSMS) pour diviser l'ensemble du script en lots.

Déjà répondu plusieurs fois... exemple 1

4 votes

Pour ma défense, j'ai regardé les doublons suggérés avant de soumettre la question - et votre exemple n'est pas apparu, et ce n'est pas vraiment un doublon, bien que la réponse soit applicable.

35 votes

Il est difficile de chercher "GO" ici :-)

5voto

TonyP Points 1592
Use herDatabase
GO ; 

Le code dit d'exécuter les instructions au-dessus de la GO marqueur. Ma base de données par défaut est myDatabase, donc au lieu d'utiliser myDatabase GO et fait une requête pour utiliser sa base de données.

2 votes

Et pourquoi cela ne fonctionnerait-il pas sans "GO" ? Je viens de le tester - il n'y a aucune différence. "GO" semble être redondant pour l'instruction "USE".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X