Pętle w SQL Server / Transact-SQL

1. Jak tworzyć pętle w SQL Server / T-SQL?

Jak zapewne już wiesz, pętle w programowaniu służą do tzw. zapętlania, a więc wykonywania danego bloku kodu wiele razy. W SQL Server mamy do dyspozycji pętlę WHILE. Składnia pętli WHILE jest następująca:

--tomaszkenig.pl
WHILE wyrażenie_logiczne ( warunek wejścia w pętlę )   
     { wyrażenie_sql | blok_t-sql | BREAK | CONTINUE }

Jeśli warunek wejścia do pętli nie został osiągnięty, blok kodu jest pomijany. Poniżej prosty przykład wykorzystania pętli WHILE w SQL Server w bloku kodu T-SQL. W przykładzie pętla wypisze liczby od 1 do 100. W przykładzie zastosowałem zamianę wartości liczbowej na tekstową przy pomocy funkcji znakowej CAST.

--tomaszkenig.pl
DECLARE @intCounter as INT = 1;
WHILE @intCounter <= 100
BEGIN
PRINT 'Bieżąca wartość licznika to: '+ CAST(@intCounter AS VARCHAR);
SET @IntCounter = @IntCounter + 1;
END;
Pętle w SQL Server
Pętle w SQL Server

Poniżej podobny przykład wykorzystania pętli WHILE z blokiem T-SQL. W tym przykładzie tworzymy dwukolumnową tabelę. Następnie wprowadzamy do pierwszej kolumny liczby od 1 do 1000.

--tomaszkenig.pl
CREATE TABLE TABLE_1 (ID INT
);
GO

declare @IntCounter AS INT = 1;

WHILE @IntCounter < 1000
BEGIN
INSERT INTO TABLE_1 (ID) VALUES (@IntCounter);
SET @IntCounter = @IntCounter + 1;
END;
GO

2. Warunki wyjścia z pętli i kontynuacji – BREAK I CONTINUE w pętlach Transact-SQL

BREAK w pętli WHILE to warunek wyjścia z pętli. Możemy zastosować taki warunek, jeśli chcemy, by np zakończyć wcześniej pętlę bez względu na warunek wejścia. Polecenie CONTINUE to informacja, by kontynuować dalsze działanie. Zróbmy krótki przykład modyfikujący dane w tabeli TABLE_1 z poprzedniego punktu. Warunek wejścia do pętli to ID mniejsze lub równe 900. Dla wartości mniejszych od 800 pętla  za pomocą polecenia UPDATE zmodyfikuje kolumnę VALUE wstawiając do niej wartość „Kurs SQL Server”. Po osiągnięciu ID = 800 powinno nastąpić wcześniejsze wyjście z pętli nieokreślone w warunku wejściowym WHILE.

WHILE (SELECT MIN(ID) FROM TABLE_1 WHERE VALUE IS NULL) <= 900
BEGIN
UPDATE TABLE_1
SET VALUE = 'kurs SQL Server'
WHERE ID = (SELECT MIN(ID) FROM TABLE_1 WHERE VALUE IS NULL);
IF (SELECT MIN(ID) FROM TABLE_1 WHERE VALUE IS NULL) < 800 
CONTINUE
ELSE
BREAK
END;
GO

SELECT * FROM TABLE_1 ORDER BY 1;

Powyższy przykład ma za zadanie zobrazowanie w jaki sposób korzystać z BREAK I CONTINUE. Całość warunku moglibyśmy oczywiście zapisać w warunku wejścia do pętli. Przykład zastosowania pętli WHILE możesz znaleźć też na mojej stronie w artykule o funkcji zliczającej dni robocze w SQL Server. Artykuł jest częścią kursu SQL Server.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *