Použití smyček T-SQL pro vyhrazené fondy SQL ve službě Azure Synapse Analytics

Tip

Microsoft Fabric Data Warehouse je relační sklad v podnikovém měřítku na základu datového jezera s architekturou připravenou pro budoucnost, integrovanou AI a novými funkcemi. Pokud s datovými sklady začínáte, začněte pracovat s Fabric Data Warehouse. Stávající úlohy fondu dedikované SQL můžou upgradovat na Fabric a získat tak přístup k novým funkcím napříč datovou vědou, analýzou v reálném čase a reportováním.

Tento článek obsahuje tipy pro vývoj řešení vyhrazeného fondu SQL pomocí smyček T-SQL a nahrazení kurzorů.

Účel smyček WHILE

Vyhrazené fondy SQL ve službě Azure Synapse podporují smyčku WHILE pro opakující se bloky 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í jsou téměř všechny kurzory napsané v SQL kódu typu fast forward a jen pro čtení. Smyčky WHILE jsou tedy skvělou alternativou pro nahrazení kurzorů.

Výměna kursorů v dedikovaném SQL fondu

Než se ale do toho bezhlavě pustíte, měli byste si položit následující otázku: "Mohl by být tento kurzor přepsán tak, aby používal operace založené na sadě?"

V mnoha případech je odpověď ano a je často nejlepším přístupem. Operace založená na množinách je často prováděna rychleji než iterativní po řádcích.

Kurzory pro rychlé posouvání jen pro čtení lze snadno nahradit konstrukcí smyčky. Následující příklad je jednoduchý. Tento příklad kódu aktualizuje statistiky 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 sloužící 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
;

Za druhé, inicializace proměnných potřebných k provedení smyčky:

DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
,       @i INT = 1
;

Teď iterujte přes příkazy a vykonejte je jeden po druhém.

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.