J'ai toujours été confus avec quand je devrais utiliser le mot-clé GO après les commandes et si un point-virgule est requis à la fin des commandes. Quelles sont les différences et pourquoi / quand dois-je les utiliser?
Lorsque j'exécute le script Generate dans SQL Server Management Studio, il semble utiliser GO partout, mais pas le point-virgule.
sql
sql-server
Enfers
la source
la source
Réponses:
GO
ne concerne que SSMS - il ne s'agit pas de Transact SQL réel, il dit simplement à SSMS d'envoyer les instructions SQL entre chacunGO
dans des lots individuels de manière séquentielle.Le
;
est un délimiteur d'instruction SQL, mais pour la plupart, le moteur peut interpréter où vos instructions sont interrompues.La principale exception et l'endroit où le
;
est le plus souvent utilisé est avant une instruction d'expression de table commune.la source
GO
n'est pas T-SQL tant qu'il;
estMERGE
instruction doit être terminée par un point-virgule.;
c'est obsolète, ne PAS l'utiliser est obsolète, c'est-à-dire que cela va devenir obligatoire selon la source.La raison pour laquelle vous voyez autant de GO dans les scripts DDL générés est due à la règle suivante concernant les lots.
L'un des cas d'utilisation de Generated DDL consiste à 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, la déclaration GO met fin au lot.
la source
ALLER
Go est un séparateur de lots. Cela signifie que tout ce qui se trouve dans ce lot est local pour ce lot particulier.
Les déclarations de variables, variables de table, etc. ne traversent pas les
GO
instructions.Les tables #Temp sont locales à une connexion, elles s'étendent donc sur les instructions GO.
Point virgule
Un point-virgule est un terminateur d'instruction. Ceci est uniquement utilisé pour identifier 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.
Cependant, les CTE exigent que le WITH soit la première instruction, vous avez donc besoin d'un point-virgule avant le WITH.
la source
MERGE
instruction doit être terminée par un point-virgule.Vous devez utiliser un point-virgule pour terminer chaque instruction SQL. Ceci est défini dans les standards SQL,
Bien sûr, le plus souvent, SQL Server vous permet d'omettre le terminateur d'instruction, mais pourquoi adopter de mauvaises habitudes?
Comme d'autres l'ont souligné, l'instruction précédant une expression de table commune (CTE) doit se terminer par un point-virgule. En conséquence, parmi les gens qui n'ont pas complètement adopté le terminateur point-virgule, nous voyons ceci:
ce qui, je pense, semble vraiment étrange. Je suppose que cela a du sens dans un forum en ligne lorsque vous ne pouvez pas dire la qualité du code dans lequel il sera collé.
En outre, une
MERGE
instruction doit être terminée par un point-virgule. Voyez-vous un modèle ici? Voici quelques-uns des nouveaux ajouts à TSQL qui suivent de près les standards SQL. On dirait que l'équipe SQL Server est en train de rendre obligatoire l'utilisation du terminateur point-virgule.la source
GO est un terminateur de lot, un point-virgule est un terminateur d'instruction.
vous utiliserez GO lorsque vous souhaitez avoir plusieurs instructions create proc dans un seul script car create proc doit être la première instruction d'un lot. Si vous utilisez des expressions de table courantes, l'instruction qui précède doit se terminer par un point-virgule
la source
MERGE
instruction doit être terminée par un point-virgule.