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.

Von Michael

Schreibe einen Kommentar