T-SQL-hurkok használata a Synapse SQL-sel az Azure Synapse Analyticsben

Tip

Microsoft Fabric Data Warehouse egy nagyvállalati szintű relációs raktár egy Data Lake-alaprendszeren, jövőre kész architektúrával, beépített AI-vel és új funkciókkal. Ha még nem ismerkedik adattárházzal, kezdje a Fabric Data Warehouse. A meglévő dedikált SQL-készlet számítási feladatai frissíthetők Fabric az adatelemzés, a valós idejű elemzés és a jelentéskészítés új képességeinek eléréséhez.

Ez a cikk alapvető tippeket nyújt a T-SQL-hurkok használatához, a kurzorok cseréjéhez és a kapcsolódó megoldások Synapse SQL-sel való fejlesztéséhez.

WHILE hurkok célja

A Synapse SQL támogatja a WHILE ciklust az utasításblokkok ismételt végrehajtására. Ez a WHILE ciklus addig folytatódik, amíg a megadott feltételek teljesülnek, vagy amíg a kód nem szünteti meg a hurkot a BREAK kulcsszóval.

A Synapse SQL hurkoi hasznosak az SQL-kódban definiált kurzorok lecseréléséhez. Szerencsére az SQL-kódban írt kurzorok szinte mindegyike gyors előrehaladású, írásvédett. A WHILE hurkok tehát kiváló alternatívát jelentenek a kurzorok cseréjéhez.

Kurzorok cseréje a Synapse SQL-ben

A merülés előtt a következő kérdést kell figyelembe venni: "Lehet ezt a kurzort újraírni a set-alapú műveletek használatához?" Sok esetben a válasz igen, és gyakran a legjobb módszer. A set-alapú műveletek gyakran gyorsabban futnak, mint egy iteratív, sorról sorra történő megközelítés.

A gyors elérésű csak olvasható kurzorok könnyen felválthatók egy ismétlődő szerkezettel. Az alábbi kód egy egyszerű példa. Ez a példakód frissíti az adatbázis minden táblájának statisztikáját. A ciklus tábláinak iterálásával minden parancs egymás után fut.

Először hozzon létre egy ideiglenes táblát, amely egyedi sorszámot tartalmaz az egyes utasítások azonosításához:

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
;

Másodszor inicializálja a ciklus végrehajtásához szükséges változókat:

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

Most ismételje meg az utasításokat, végrehajtva őket egyenként:

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

Végül ejtse az első lépésben létrehozott ideiglenes táblát

DROP TABLE #tbl;

Következő lépések

További fejlesztési tippekért tekintse meg a fejlesztés áttekintését.