2010-10-07 4 views
0

Je travaille sur SQL Server 2005 et je suis venu accros le problème que j'ai exécuté la requête de mise à jour multiple sur la seule table un par un. Comme il faut beaucoup de temps pour exécuter un par un, j'ai appris qu'en utilisant "GO", je peux exécuter la requête un par un. Comme cetteUtilisation de GO dans SQL Server 2005

Update Table A .... 

GO

Mise à jour le tableau A

GO

Mise à jour le tableau A

Je ne suis pas sûr que je peux mettre la déclaration de mise à jour séparée comme celui-ci et il courrai la requête un par un. Comme je le fais sur la production, je dois être sûr que cela devrait fonctionner.

Quelqu'un peut-il me donner un exemple où je peux voir qu'en utilisant GO, la requête s'exécute un par un et non parallèle?

+0

Si vous n'êtes pas sûr à leur sujet, puis exécutez chaque mise à jour séparément .. –

+0

Merci Srini mais j'ai plusieurs mise à jour et la plupart d'entre eux sont sur la même table. et ils prennent un temps différent pour exécuter, donc j'ai pensé à faire une série séquentielle au lieu d'attendre et de le faire manuellement un par un. – Zerotoinfinity

Répondre

3

De GO (Transact-SQL)

GO n'est pas une instruction Transact-SQL; il s'agit d'une commande reconnue par les utilitaires sqlcmd et osql et par l'éditeur de code SQL Server Management Studio .

utilitaires SQL Server interprètent comme un signal GO qu'ils doivent envoyer le lot en cours des instructions Transact-SQL à une instance de SQL Server. Le lot actuel des déclarations est composé de toutes les déclarations entrées depuis le dernier GO, ou depuis le début de la session ou du script ad hoc s'il s'agit du premier GO .

+0

Comme j'utilise SQL Server Management Studio, cela signifie-t-il qu'il va exécuter ces instructions de mise à jour séparément? – Zerotoinfinity

+0

@Andrew Barber, s'il vous plaît être conscient que GO est une commande SSMS, pas TSQL, comme je l'ai dit. Donc, je pense que le mieux serait de sortir complètement de votre esprit si vous pouvez X-) –

1

Vos requêtes ne seront pas exécutées en parallèle que vous utilisiez ou non la commande GO. Astander posté une réponse expliquant ce que GO est. Lisez ça, puis revenez ici. Indépendamment du fait que vous utilisiez la commande GO, votre script sera exécuté une instruction après l'autre. Ils ne sont pas exécutés en parallèle.

Vous pouvez le prouver en écrivant un script comme celui-ci (pseudo code, mais vous voyez l'idée)

INSERT INTO MyTable ([id], [data]) VALUES (3, 'I am here') 
DELETE FROM MyTable WHERE [id]=3 

Vous pouvez mettre un GO entre ces déclarations ou non, le résultat sera le même: la première commande sera complètement terminée avant la seconde.