Použití smyček T-SQL pro vyhrazené fondy SQL ve službě Azure Synapse Analytics
Tento článek obsahuje tipy pro vývoj řešení vyhrazeného fondu SQL s využitím smyček T-SQL a nahrazení kurzorů.
Účel smyček WHILE
Vyhrazené fondy SQL v Azure Synapse podporují smyčku WHILE pro opakované spouštění bloků příkazů. Tato smyčka WHILE pokračuje tak dlouho, dokud jsou zadané podmínky pravdivé, nebo dokud kód konkrétně neukončí smyčku pomocí klíčového slova BREAK.
Smyčky jsou užitečné pro nahrazení kurzorů definovaných v kódu SQL. Naštěstí téměř všechny kurzory napsané v kódu SQL jsou v rozmanitosti rychle dopředu, jen pro čtení. Smyčky WHILE jsou proto skvělou alternativou k nahrazování kurzorů.
Nahrazení kurzorů ve vyhrazeném fondu SQL
Než se však nejprve ponoříte do hlavy, měli byste si položit následující otázku: "Mohl by se tento kurzor přepsat tak, aby používal operace založené na sadě?"
V mnoha případech je odpověď kladná a často se jedná o nejlepší přístup. Operace založená na sadě často provádí rychleji než iterativní přístup řádek po řádku.
Kurzory s rychlým posunem vpřed jen pro čtení lze snadno nahradit konstruktorem smyčky. Následující příklad je jednoduchý. Tento příklad kódu aktualizuje statistiku pro každou tabulku v databázi. Iterací tabulek ve smyčce se každý příkaz provede postupně.
Nejprve vytvořte dočasnou tabulku obsahující jedinečné číslo řádku, které slouží k identifikaci jednotlivých příkazů:
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
;
Potom inicializujte proměnné potřebné k provedení smyčky:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Teď se příkazy postupně spouštějí po jednom:
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
Nakonec vypusťte dočasnou tabulku vytvořenou v prvním kroku.
DROP TABLE #tbl;
Další kroky
Další tipy pro vývoj najdete v přehledu vývoje.