Używanie pętli T-SQL z usługą Synapse SQL w usłudze Azure Synapse Analytics
Ten artykuł zawiera podstawowe porady dotyczące używania pętli T-SQL, zastępowania kursorów i opracowywania powiązanych rozwiązań z usługą Synapse SQL.
Przeznaczenie pętli WHILE
Usługa Synapse SQL obsługuje pętlę WHILE do wielokrotnego wykonywania bloków instrukcji. Ta pętla WHILE jest kontynuowana tak długo, jak określone warunki są prawdziwe lub dopóki kod specjalnie nie zakończy pętli przy użyciu słowa kluczowego BREAK.
Pętle w usłudze Synapse SQL są przydatne do zastępowania kursorów zdefiniowanych w kodzie SQL. Na szczęście prawie wszystkie kursory napisane w kodzie SQL są bardzo szybko przekazywane, tylko do odczytu. Pętle WHILE to świetna alternatywa dla zastępowania kursorów.
Zastępowanie kursorów w usłudze Synapse SQL
Przed rozpoczęciem nurkowania należy wziąć pod uwagę następujące pytanie: "Czy ten kursor może zostać przepisany do używania operacji opartych na zestawie?" W wielu przypadkach odpowiedź brzmi tak i jest często najlepszym podejściem. Operacja oparta na zestawie często jest wykonywana szybciej niż iteracyjna, wiersz według podejścia do wiersza.
Szybkie kursory tylko do odczytu są łatwo zastępowane konstrukcją pętli. Poniższy kod jest prostym przykładem. Ten przykładowy kod aktualizuje statystyki dla każdej tabeli w bazie danych. Iterując tabele w pętli, każde polecenie jest wykonywane w sekwencji.
Najpierw utwórz tabelę tymczasową zawierającą unikatowy numer wiersza używany do identyfikowania poszczególnych instrukcji:
CREATE TABLE #tbl
WITH
( DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Sequence
, [name]
, 'UPDATE STATISTICS '+QUOTENAME([name]) AS sql_code
FROM sys.tables
;
Po drugie zainicjuj zmienne wymagane do wykonania pętli:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Teraz pętla na instrukcjach wykonujących je pojedynczo:
WHILE @i <= @nbr_statements
BEGIN
DECLARE @sql_code NVARCHAR(4000) = (SELECT sql_code FROM #tbl WHERE Sequence = @i);
EXEC sp_executesql @sql_code;
SET @i +=1;
END
Na koniec upuść tabelę tymczasową utworzoną w pierwszym kroku
DROP TABLE #tbl;
Następne kroki
Aby uzyskać więcej porad dotyczących programowania, zobacz Omówienie programowania.