Gibt es eine Methode zum Implementieren einer do while
Schleife in SQL Server 2008?
sql-server
sql-server-2008
loops
while-loop
do-while
Nithesh Narayanan
quelle
quelle
Antworten:
Ich bin mir bei DO-WHILE in MS SQL Server 2008 nicht sicher, aber Sie können Ihre WHILE-Schleifenlogik ändern, um sie wie die DO-WHILE-Schleife zu verwenden.
Beispiele finden Sie hier: http://blog.sqlauthority.com/2007/10/24/sql-server-simple-example-of-while-loop-with-continue-and-break-keywords/
Aber versuchen, Schleifen zu vermeiden auf Datenbankebene. Referenz .
quelle
Wenn Sie mit dem
GOTO
Schlüsselwort nicht sehr beleidigt sind , können Sie damit einDO
/WHILE
in T-SQL simulieren . Betrachten Sie das folgende eher unsinnige Beispiel, das in Pseudocode geschrieben ist:Hier ist der äquivalente T-SQL-Code mit goto:
Beachten Sie die Eins-zu-Eins-Zuordnung zwischen der
GOTO
aktivierten Lösung und dem OriginalDO
/WHILE
Pseudocode. Eine ähnliche Implementierung mit einerWHILE
Schleife würde folgendermaßen aussehen:Jetzt können Sie dieses Beispiel natürlich als einfache
WHILE
Schleife umschreiben , da dies kein so guter Kandidat für einDO
/WHILE
-Konstrukt ist. Der Schwerpunkt lag eher auf der Kürze des Beispiels als auf der Anwendbarkeit, da legitime Fälle, die einDO
/ erfordern,WHILE
selten sind.REPEAT / UNTIL, jemand (funktioniert NICHT in T-SQL)?
... und die
GOTO
basierte Lösung in T-SQL:Durch die kreative Verwendung
GOTO
und logische Inversion über dasNOT
Schlüsselwort besteht eine sehr enge Beziehung zwischen dem ursprünglichen Pseudocode und derGOTO
basierten Lösung. Eine ähnliche Lösung mit einerWHILE
Schleife sieht folgendermaßen aus:Es kann argumentiert werden, dass für den Fall von
REPEAT
/UNTIL
dieWHILE
basierte Lösung einfacher ist, da die if-Bedingung nicht invertiert wird. Andererseits ist es auch ausführlicher.Wenn nicht all die Verachtung in Bezug auf die Verwendung von wäre
GOTO
, könnten dies sogar idiomatische Lösungen für die wenigen Male sein, in denen diese speziellen (bösen) Schleifenkonstrukte aus Gründen der Klarheit im T-SQL-Code erforderlich sind.Verwenden Sie diese nach eigenem Ermessen und versuchen Sie, nicht den Zorn Ihrer Entwicklerkollegen zu erleiden, wenn sie Sie mit den vielfach bösartigen Personen erwischen
GOTO
.quelle
Ich erinnere mich an das mehrmalige Lesen dieses Artikels, und die Antwort kommt nur dem nahe , was ich brauche.
Wenn ich denke, dass ich einen
DO WHILE
in T-SQL benötige, liegt das normalerweise daran, dass ich einen Cursor iteriere und hauptsächlich nach optimaler Klarheit (im Vergleich zu optimaler Geschwindigkeit) suche. In T-SQL scheint das zu einemWHILE TRUE
/ zu passenIF BREAK
.Wenn dies das Szenario ist, das Sie hierher gebracht hat, kann dieses Snippet Ihnen einen Moment ersparen. Ansonsten willkommen zurück, ich. Jetzt kann ich sicher sein, dass ich mehr als einmal hier war. :) :)
Leider scheint T-SQL keine sauberere Möglichkeit zu bieten, die Schleifenoperation einzeln zu definieren, als diese Endlosschleife.
quelle
Sie können auch eine Exit-Variable verwenden, wenn Ihr Code besser lesbar sein soll:
Dies wäre wahrscheinlich relevanter, wenn Sie eine kompliziertere Schleife haben und versuchen, die Logik im Auge zu behalten. Wie bereits erwähnt, sind Schleifen teuer. Versuchen Sie daher, andere Methoden zu verwenden, wenn Sie können.
quelle
Nur While Loop wird offiziell vom SQL Server unterstützt. Es gibt bereits eine Antwort für DO while-Schleife. Ich erläutere die Antwort auf Möglichkeiten, um verschiedene Arten von Schleifen in SQL Server zu erreichen.
Wenn Sie wissen, dass Sie die erste Iteration der Schleife trotzdem abschließen müssen, können Sie die Version DO..WHILE oder REPEAT..UNTIL von SQL Server ausprobieren .
DO..WHILE Loop
REPEAT..UNTIL Loop
FOR-Schleife
Referenz
quelle