96 votes

Dans SQL Server, quand faut-il utiliser GO et quand faut-il utiliser le point-virgule ; ?

Je n'ai jamais su quand utiliser le mot-clé GO après les commandes et si un point-virgule est nécessaire à la fin des commandes. Quelles sont les différences et pourquoi/quand je dois les utiliser ?

Lorsque j'exécute le programme Generate-script dans SQL Server Management Studio, il semble utiliser GO partout, mais pas le point-virgule.

91voto

cjk Points 27463

GO ne concerne que SSMS - il ne s'agit pas d'un véritable Transact SQL, il indique simplement à SSMS d'envoyer les instructions SQL entre chaque opération. GO dans des lots individuels de manière séquentielle.

El ; est un délimiteur d'instructions SQL, mais pour la plupart, le moteur peut interpréter l'endroit où vos instructions sont séparées.

L'exception principale, et le lieu où le ; est utilisé le plus souvent avant une déclaration d'expression de table commune.

75voto

Conrad Frix Points 34272

La raison pour laquelle vous voyez tant de GO dans les scripts DDL générés est due à ce qui suit. règle sur les lots.

CRÉER UN DÉFAUT, CRÉER UNE FONCTION, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER, et CREATE VIEW ne peuvent pas être combinées avec d'autres autres instructions dans un lot. L'instruction CREATE doit commencer le lot. Toutes les instructions Toutes les autres instructions qui suivent dans ce lot seront interprétées comme faisant partie de la définition de la première instruction CREATE de la première déclaration.

L'un des cas d'utilisation de Generated DDL est de générer plusieurs objets dans un seul fichier. Pour cette raison, un générateur DDL doit être capable de générer des lots. Comme d'autres l'ont dit, l'instruction GO met fin au lot.

33voto

Raj More Points 22358

GO

Go est un séparateur de lots. Cela signifie que tout ce qui se trouve dans ce lot est local à ce lot particulier.

Toutes les déclarations de variables, de variables de table, etc. GO déclarations.

Les tables temporaires sont locales à une connexion, elles s'étendent donc sur plusieurs déclarations GO.

Point-virgule

Le point-virgule est un terminateur d'instruction. Il est uniquement utilisé pour indiquer qu'une déclaration particulière est terminée.

Dans la plupart des cas, la syntaxe de l'instruction elle-même suffit à déterminer la fin d'une instruction.

Toutefois, les CTE exigent que la déclaration WITH soit la première déclaration. Vous devez donc placer un point-virgule avant la déclaration WITH.

11voto

onedaywhen Points 24594

Vous devez utiliser un point-virgule pour terminer chaque instruction SQL. Ceci est défini dans les normes SQL,

Bien sûr, le plus souvent, SQL Server vous permet d'omettre le terminateur d'instruction, mais pourquoi prendre de mauvaises habitudes ?

Comme d'autres l'ont souligné, l'instruction précédant une expression de table commune (CTE) doit être terminée par un point-virgule. En conséquence, voici ce qu'on peut voir, de la part de personnes qui n'ont pas complètement adopté le point-virgule comme terminaison :

;WITH ...

ce qui me semble vraiment bizarre. Je suppose que cela a un sens dans un forum en ligne où l'on ne peut pas savoir quelle est la qualité du code dans lequel il sera collé.

En outre, un MERGE doit être terminée par un point-virgule. Voyez-vous un modèle ici ? Ce sont quelques-uns des nouveaux ajouts à TSQL qui suivent de près les normes SQL. Il semble que l'équipe du serveur SQL aille dans le sens d'une utilisation obligatoire du point-virgule comme terminaison.

8voto

SQLMenace Points 68670

GO est un terminateur de lot, un point-virgule est un terminateur de déclaration.

vous utiliserez GO lorsque vous voudrez avoir plusieurs instructions create proc dans un script parce que create proc doit être la première instruction dans un lot. Si vous utilisez des expressions de table communes, l'instruction qui les précède doit être terminée par un point-virgule.

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