Använda T-SQL-loopar med Synapse SQL i Azure Synapse Analytics
Den här artikeln innehåller viktiga tips för hur du använder T-SQL-loopar, ersätter markörer och utvecklar relaterade lösningar med Synapse SQL.
Syftet med WHILE-loopar
Synapse SQL stöder WHILE-loopen för upprepade körning av instruktionsblock. Den här WHILE-loopen fortsätter så länge de angivna villkoren är sanna eller tills koden uttryckligen avslutar loopen med hjälp av nyckelordet BREAK.
Loopar i Synapse SQL är användbara för att ersätta markörer som definierats i SQL-kod. Lyckligtvis är nästan alla markörer som skrivs i SQL-kod av den snabbsnabba, skrivskyddade sorten. Så WHILE-loopar är ett bra alternativ för att ersätta markörer.
Ersätt markörer i Synapse SQL
Innan du dyker in bör följande fråga övervägas: "Kan markören skrivas om för att använda uppsättningsbaserade åtgärder?" I många fall är svaret ja och är ofta den bästa metoden. En uppsättningsbaserad åtgärd körs ofta snabbare än en iterativ, rad för rad-metod.
Snabbslinga framåt skrivskyddade markörer ersätts enkelt med en loopkonstruktion. Följande kod är ett enkelt exempel. Det här kodexemplet uppdaterar statistiken för varje tabell i databasen. Genom att iterera över tabellerna i loopen körs varje kommando i följd.
Skapa först en tillfällig tabell som innehåller ett unikt radnummer som används för att identifiera de enskilda uttrycken:
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
;
För det andra initierar du de variabler som krävs för att köra loopen:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Loopa nu över instruktioner som kör dem en i taget:
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
Ta slutligen bort den temporära tabell som skapades i det första steget
DROP TABLE #tbl;
Nästa steg
Fler utvecklingstips finns i utvecklingsöversikt.