適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
設定 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 }
Arguments
boolean_expression
傳回 或的TRUEFALSE。 如果布爾表達式包含 SELECT 語句, SELECT 語句必須以括弧括住。
{ sql_statement | statement_block }
使用語句區塊所定義的任何 Transact-SQL 語句或語句群組。 若要定義語句區塊,請使用流程控制關鍵字 BEGIN 和 END。
BREAK
導致最 WHILE 內部循環的結束。 會執行在 關鍵詞後面 END 顯示的任何語句,標示循環結尾。
CONTINUE
WHILE重新啟動迴圈。 忽略 關鍵詞之後 CONTINUE 的任何語句。
CONTINUE 經常會由測試開啟,但不一定會開啟 IF 。 如需詳細資訊,請參閱 流程控制。
Remarks
如果巢狀兩個或多個 WHILE 循環,內部 BREAK 會結束至下一個最外層迴圈。 內層迴圈尾端之後的所有陳述式會先執行,然後重新啟動下一個最外層迴圈。
Examples
本文中的程式代碼範例會使用 AdventureWorks2025 或 AdventureWorksDW2025 範例資料庫,您可以從 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