在 Azure Synapse Analytics 中針對專用 SQL 集區使用 T-SQL 廻圈
本文提供使用 T-SQL 迴圈取代專用 SQL 集區資料指標的解決方案開發祕訣。
WHILE 迴圈的用途
Azure Synapse 的專用 SQL 集區支援使用 WHILE 迴圈重複執行陳述式區塊。 只要指定的條件都成立,或者在程式碼使用 BREAK 關鍵字特別終止迴圈之前,這個 WHILE 迴圈都會繼續下去。
迴圈適用於取代 SQL 程式碼中定義的資料指標。 幸運的是,幾乎所有以 SQL 程式碼撰寫的資料指標都是向前快轉,並且只讀取多樣性。 因此,WHILE 迴圈是取代資料指標的絕佳替代方式。
取代專用 SQL 集區中的資料指標
不過,在深入說明之前,您應該先自問下列問題:「這個資料指標是否能重新撰寫以使用集合型作業?」
在許多狀況下答案是肯定的,通常也是最佳方法。 集合型作業的執行速度通常會比反覆的逐列方法更快。
向前快轉唯讀資料指標可以輕鬆地以迴圈建構取代。 下例是一個簡單的範例。 程式碼範例會更新資料庫中每個資料表的統計資料。 藉由反覆迴圈中的資料表,每個命令就能依序執行。
首先,建立暫存資料表,其中包含用來識別個別陳述式的唯一資料列數目:
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
;
其次,初始化執行迴圈的必要變數:
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
現在每次對一個陳數式執行一次迴圈:
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
最後,將第一個步驟中建立的暫存資料表卸除
DROP TABLE #tbl;
下一步
如需更多開發秘訣,請參閱開發概觀。