Mit einer WHILE-Schleife kann man Statements beliebig oft ausführen lassen. Hierzu benötigt man unter anderem einen Schleifenzähler.
Den Schleifenzähler deklariert man sich am besten als Variable. Die Variable kann man mit einem Wert fest befüllen, oder dynamisch über ein SELECT-Statement.
Der Schleifenzähler kann zudem auch in den Statements als Einschränkung im WHERE verwendet werden.
--Zähler DECLARE @i int --Variableninitialisierung SET @i = 1 WHILE (@i <= 10) BEGIN --Abfrage / Logik SELECT ...... UPDATE ...... INSERT ...... --Zähler um 1 erhöhen SET @i = @i + 1 END
Die Syntax beginnt damit, dass man wie hier die Variable deklariert und initialisiert. Danach beginnt schon die WHILE-Schleife. Hier handelt es sich im eine Kopfgesteuerte WHILE-Schleife. Der Schleifenzähler befindet sich im Kopf der WHILE-Anweisung. Innerhalb der Klammer beginnt man mit dem Schleifenzähler (Variable @i), danach kommt das Abbruchkriterium ( <= 10 ). Hier wird die WHILE-Schleife so lange ausgeführt bis die Variable @i den Wert 10 erreicht hat. Beim elften Versuch die Schleife zu durchlaufen wird der SQL-Server die Ausführung beenden.
Damit man keine ENDLOS-Schleife baut darf man nicht vergessen den Schleifenzähler innerhalb der WHILE-Schleife zu erhöhen. Hat man eine verschachtelte Schleife, dann darf man nicht vergessen den Schleifenzähler der Inneren-Schleife wieder auf den initial Wert zu setzen.
-Zähler äussere Schleife DECLARE @i int --Zähler innere Schleife DECLARE @i2 int --Variableninitialisierung SET @i = 1 SET @i2 = 1 WHILE (@i <= 10) BEGIN --Abfrage / Logik SELECT ...... UPDATE ...... INSERT ...... --Zähler der äusseren Schleife um 1 erhöhen SET @i = @i + 1 WHILE (@i2 <= 100) BEGINN --Abfrage / Logik SELECT ...... UPDATE ...... INSERT ...... --Zähler der inneren Schleife um 1 erhöhen SET @i2 = @i2 + 1 END --Zähler der inneren Schleife zurücksetzen auf initial Wert SET @i2 = 1 END
Eine weitere Verschachtelung einer WHILE-Schleife ist natürlich möglich.