Share via


在 Azure Synapse Analytics 中使用 T-SQL 迴圈搭配 Synapse SQL

本文提供您使用 T-SQL 迴圈、取代資料指標,以及使用 Synapse SQL 開發相關解決方案的基本提示。

WHILE 迴圈的用途

Synapse SQL 支援 WHILE 迴圈,可重複執行陳述式區塊。 只要指定的條件都成立,或者在程式碼使用 BREAK 關鍵字特別終止迴圈之前,這個 WHILE 迴圈都會繼續下去。

Synapse SQL 中的迴圈適合用於取代 SQL 程式碼中定義的資料指標。 幸運的是,幾乎所有以 SQL 程式碼撰寫的資料指標都是向前快轉,並且只讀取多樣性。 因此,WHILE 迴圈是取代資料指標的絕佳替代方式。

取代 Synapse 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;

後續步驟

如需更多開發秘訣,請參閱開發概觀