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