Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 tippeket tartalmaz a dedikált SQL-készlet megoldásának T-SQL-hurkok használatával történő fejlesztéséhez és a kurzorok cseréjéhez.
A WHILE hurkok célja
Az Azure Synapse dedikált SQL-készletei támogatják a WHILE ciklust az utasításblokkok ismételt végrehajtásához. 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 hurkok az SQL-kódban definiált kurzorok lecseréléséhez hasznosak. Szerencsére az SQL-kódban írt kurzorok szinte mindegyike előretolt és írásvédett. A WHILE hurkok tehát kiváló alternatívát jelentenek a kurzorok cseréjéhez.
Kurzorok cseréje dedikált SQL-készletben
Mielőtt azonban fejjel előre belevágna, tegye fel magának a következő kérdést: "Át lehet-e írni ezt a kurzort úgy, hogy halmazalapú műveleteket használjon?"
Sok esetben a válasz igen, és gyakran a legjobb módszer. A halmazon végzett művelet gyakran gyorsabban hajtható végre, mint az iteratív, sorról sorra történő megközelítés.
A gyors előrefelé mutató írásvédett kurzorok könnyen lecserélhetők egy hurkos szerkezetre. Az alábbi példa egy egyszerű. 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.