Existe-t-il une méthode pour implémenter la do while
boucle dans SQL Server 2008?
sql-server
sql-server-2008
loops
while-loop
do-while
Nithesh Narayanan
la source
la source
Réponses:
Je ne suis pas sûr de DO-WHILE DANS MS SQL Server 2008 mais vous pouvez changer votre logique de boucle WHILE, de manière à utiliser comme une boucle DO-WHILE.
Des exemples sont tirés d'ici: http://blog.sqlauthority.com/2007/10/24/sql-server-simple-example-of- While - loop - with - continue- and- break - keywords/
Mais essayez d' éviter les boucles au niveau de la base de données. Référence .
la source
Si vous n'êtes pas très offensé par le
GOTO
mot - clé, il peut être utilisé pour simuler unDO
/WHILE
dans T-SQL. Prenons l'exemple suivant, plutôt absurde, écrit en pseudocode:Voici le code T-SQL équivalent utilisant goto:
Notez le mappage un à un entre la
GOTO
solution activée et leDO
/WHILE
pseudo - code d'origine. Une implémentation similaire utilisant uneWHILE
boucle ressemblerait à ceci:Maintenant, vous pouvez bien sûr réécrire cet exemple particulier comme une simple
WHILE
boucle, car ce n'est pas un si bon candidat pour une constructionDO
/WHILE
. L'accent était mis sur la brièveté de l'exemple plutôt que sur l'applicabilité, car les cas légitimes nécessitant unDO
/WHILE
sont rares.REPEAT / JUSQU'À, n'importe qui (ne fonctionne PAS en T-SQL)?
... et la
GOTO
solution basée sur T-SQL:Grâce à l'utilisation créative
GOTO
et à l'inversion de logique via leNOT
mot - clé, il existe une relation très étroite entre le pseudo-code d'origine et laGOTO
solution basée. Une solution similaire utilisant uneWHILE
boucle ressemble à ceci:Un argument peut être fait que pour le cas du
REPEAT
/UNTIL
, laWHILE
solution basée est plus simple, car la condition if n'est pas inversée. D'un autre côté, il est également plus verbeux.S'il n'y avait pas tout le mépris autour de l'utilisation de
GOTO
, il pourrait même s'agir de solutions idiomatiques pour les rares fois où ces constructions de boucle (mal) particulières sont nécessaires dans le code T-SQL pour des raisons de clarté.Utilisez-les à votre propre discrétion, en essayant de ne pas subir la colère de vos collègues développeurs lorsqu'ils vous surprennent à utiliser le très décrié
GOTO
.la source
Il me semble me souvenir d'avoir lu cet article plus d'une fois, et la réponse n'est que proche de ce dont j'ai besoin.
Habituellement, quand je pense que je vais avoir besoin d'un
DO WHILE
en T-SQL, c'est parce que j'itère un curseur et que je recherche en grande partie une clarté optimale (par rapport à une vitesse optimale). Dans T-SQL, cela semble correspondre à unWHILE TRUE
/IF BREAK
.Si c'est le scénario qui vous a amené ici, cet extrait de code peut vous faire gagner un instant. Sinon, bon retour, moi. Maintenant, je peux être certain que je suis venu ici plus d'une fois. :)
Malheureusement, T-SQL ne semble pas offrir un moyen plus propre de définir individuellement l'opération de boucle que cette boucle infinie.
la source
Vous pouvez également utiliser une variable de sortie si vous souhaitez que votre code soit un peu plus lisible:
Ce serait probablement plus pertinent lorsque vous avez une boucle plus compliquée et que vous essayez de garder une trace de la logique. Comme indiqué, les boucles sont chères, alors essayez d'utiliser d'autres méthodes si vous le pouvez.
la source
Only While Loop est officiellement pris en charge par le serveur SQL. Il y a déjà une réponse pour DO while loop. Je détaille la réponse sur les moyens de réaliser différents types de boucles dans le serveur SQL.
Si vous savez, vous devez quand même terminer la première itération de la boucle, alors vous pouvez essayer la version DO..WHILE ou REPEAT..UNTIL du serveur SQL.
Boucle DO..WHILE
Boucle REPEAT..UNTIL
Boucle FOR
Référence
la source