2010-02-22 4 views
10

Quelle est la différence entre ; et GO dans une procédure stockée dans SQL Server? En fait, si j'ai une procédure stockée dans SQL Server et que je veux y mettre des requêtes séparées, la première calculant le nombre d'enregistrements (count) et la seconde sélectionnant des enregistrements en fonction de certaines conditions, devrais-je utiliser entre ces deux requêtes?Quelle est la différence entre; et GO dans une procédure stockée dans SQL Server?

Go ou ;

Répondre

18

; termine juste la déclaration. GO n'est pas une instruction mais une commande au serveur pour valider le lot en cours dans la base de données. Cela crée un arrêt à l'intérieur de la transaction.

http://msdn.microsoft.com/en-us/library/ms188037.aspx

(mise à jour, merci pour les commentaires): GO est une déclaration destinée au studio de gestion pour autant que je sais, peut-être à d'autres outils et

+3

En fait, go est redondant en dehors du "studio de gestion". Je ne vais pas (-1) cependant. –

+0

@Hassan Syed: Oui, vous avez raison – Faruz

+0

Essayez d'exécuter une instruction avec 'GO' à l'intérieur d'un SqlCommand, il va lancer une exception. – cjk

11

Le point-virgule sépare les requêtes, la La commande GO sépare les lots. (GO n'est pas une commande T-SQL, c'est une commande reconnue par les utilitaires sqlcmd et osql et Management Studio.)

Vous ne pouvez pas utiliser GO dans une procédure stockée. Si vous voulez essayer, la définition de la procédure se terminera là, et le reste sera un lot séparé.

Une variable locale a la portée du lot, donc après une commande GO vous ne pouvez pas utiliser des variables locales déclarées avant la commande GO:

declare @test int 

set @test = 42 

GO 

select @Test -- causes an error message as @Test is undefined 
4

GO n'est pas une commande au serveur, il est le Séparateur de lots par défaut pour la plupart des outils client fournis par MS. Lorsque l'outil client rencontre "GO" sur une nouvelle ligne par lui-même, il envoie toutes les commandes qu'il a accumulées jusqu'à présent sur le serveur, puis recommence à nouveau. Cela signifie que toutes les variables déclarées dans un lot ne sont pas disponibles dans les lots suivants. Et cela signifie également que les commentaires multi-lignes ne peuvent pas être placés autour d'une commande "GO" - parce que le serveur verra le premier lot, et voir un commentaire non terminé.

2

Il marque la fin d'un lot dans Query Analyzer et signale donc la fin d'une définition de procédure stockée dans ce lot. Autant que je sache, ce n'est pas une partie de sp. GO n'est pas une commande TSQL.

Et; termine juste la déclaration.

Questions connexes