WHILE (Transact-SQL)
適用於:Microsoft Fabric SQL 資料庫中Microsoft網狀架構倉儲中的 SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) SQL 分析端點Microsoft網狀架構
設定 SQL 語句或語句區塊重複執行的條件。 只要符合指定的條件,就會重複執行這些陳述式。 迴圈中的 WHILE
語句執行可以從 迴圈內使用 BREAK
和 CONTINUE
關鍵詞來控制。
Syntax
SQL Server、Azure SQL 資料庫、Azure SQL 受控執行個體 和 Microsoft Fabric 的語法。
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Azure Synapse Analytics 和分析平台系統 (PDW) 的語法。
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
引數
boolean_expression
傳回 或FALSE
的TRUE
表達式。 如果布爾表達式包含 SELECT
語句, SELECT
語句必須以括弧括住。
{ sql_statement | statement_block }
使用語句區塊所定義的任何 Transact-SQL 語句或語句群組。 若要定義語句區塊,請使用流程控制關鍵字 BEGIN
和 END
。
BREAK
導致最 WHILE
內部循環的結束。 會執行在 關鍵詞後面 END
顯示的任何語句,標示循環結尾。
CONTINUE
WHILE
重新啟動迴圈。 忽略 關鍵詞之後 CONTINUE
的任何語句。 CONTINUE
經常會由測試開啟,但不一定會開啟 IF
。 如需詳細資訊,請參閱 流程控制。
備註
如果巢狀兩個或多個 WHILE
循環,內部 BREAK
會結束至下一個最外層迴圈。 內層迴圈尾端之後的所有陳述式會先執行,然後重新啟動下一個最外層迴圈。
範例
本文 Transact-SQL 程式碼範例使用 AdventureWorks2022
或 AdventureWorksDW2022
範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。
A. 使用 BREAK 和 CONTINUE 搭配巢狀 IF...ELSE 和 WHILE
在下列範例中,如果產品的平均清單價格小於 $300,迴圈 WHILE
會將價格加倍,然後選取最高價格。 如果最高價格小於或等於 $500,迴圈 WHILE
會重新啟動並再次加倍價格。 此循環會繼續將價格加倍,直到最高價格大於 $500,然後結束 WHILE
迴圈並列印訊息。
USE AdventureWorks2022;
GO
WHILE (
SELECT AVG(ListPrice)
FROM Production.Product
) < $300
BEGIN
UPDATE Production.Product
SET ListPrice = ListPrice * 2
SELECT MAX(ListPrice)
FROM Production.Product
IF (
SELECT MAX(ListPrice)
FROM Production.Product
) > $500
BREAK
ELSE
CONTINUE
END
PRINT 'Too much for the market to bear';
B. 在游標中使用 WHILE
下列範例使用 @@FETCH_STATUS
控制 WHILE
迴圈中的資料指標活動。
DECLARE @EmployeeID AS NVARCHAR(256)
DECLARE @Title AS NVARCHAR(50)
DECLARE Employee_Cursor CURSOR
FOR
SELECT LoginID,
JobTitle
FROM AdventureWorks2022.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT
FROM Employee_Cursor
INTO @EmployeeID,
@Title;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' ' + @EmployeeID + ' ' + @Title
FETCH NEXT
FROM Employee_Cursor
INTO @EmployeeID,
@Title;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
C:WHILE 迴圈
在下列範例中,如果產品的平均清單價格小於 $300,迴圈 WHILE
會將價格加倍,然後選取最高價格。 如果最高價格小於或等於 $500,迴圈 WHILE
會重新啟動並再次加倍價格。 此循環會繼續將價格加倍,直到最高價格大於 $500,然後結束 WHILE
迴圈。
WHILE (
SELECT AVG(ListPrice)
FROM dbo.DimProduct
) < $300
BEGIN
UPDATE dbo.DimProduct
SET ListPrice = ListPrice * 2;
SELECT MAX(ListPrice)
FROM dbo.DimProduct
IF (
SELECT MAX(ListPrice)
FROM dbo.DimProduct
) > $500
BREAK;
END