WHILE (Transact-SQL)

適用於:Microsoft Fabric 中 Microsoft Fabric倉儲中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Azure SynapseAnalytics Analytics Platform System (PDW)SQL 分析端點

設定重複執行 SQL 陳述式或陳述式區塊的條件。 只要符合指定的條件,就會重複執行這些陳述式。 您可以在迴圈內,利用 BREAK 和 CONTINUE 關鍵字來控制 WHILE 迴圈陳述式的執行情況。

Transact-SQL 語法慣例

Syntax

-- Syntax for SQL Server and Azure SQL Database and Microsoft Fabric
  
WHILE Boolean_expression   
     { sql_statement | statement_block | BREAK | CONTINUE }  
  
-- Syntax for Azure Azure Synapse Analytics and Parallel Data Warehouse  
  
WHILE Boolean_expression   
     { sql_statement | statement_block | BREAK }  
  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

Boolean_expression
這是傳回 TRUEFALSE運算式。 如果布林運算式包含 SELECT 陳述式,則這個 SELECT 陳述式必須括在括號中。

{sql_statement | statement_block}
這是利用陳述式區塊來定義的任何 Transact-SQL 陳述式或陳述式分組。 若要定義陳述式區塊,請使用流程控制關鍵字 BEGIN 和 END。

BREAK
結束最內層的 WHILE 迴圈。 將執行出現在 END 關鍵字 (表示迴圈結束) 之後的任何陳述式。

CONTINUE
重新啟動 WHILE 迴圈,忽略 CONTINUE 關鍵字之後的任何陳述式。

備註

如果一個或多個 WHILE 迴圈具有巢狀結構,內層的 BREAK 會跳到下一個最外層的迴圈。 內層迴圈尾端之後的所有陳述式會先執行,然後重新啟動下一個最外層迴圈。

範例

A. 使用 BREAK 和 CONTINUE 搭配巢狀 IF...ELSE 和 WHILE

在下列範例中,如果產品的平均標價小於 $300WHILE 迴圈會將標價加倍,再選取最大價格。 如果最大價格小於或等於 $500WHILE 迴圈會重新啟動,價格會再加倍。 這個迴圈會繼續使價格加倍,直到最大價格大於 $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 迴圈

在下列範例中,如果產品的平均標價小於 $300WHILE 迴圈會將標價加倍,再選取最大價格。 如果最大價格小於或等於 $500WHILE 迴圈會重新啟動,價格會再加倍。 這個迴圈會繼續使價格加倍,直到最高價格大於 $500 為止,然後結束 WHILE 迴圈。

-- Uses AdventureWorks  
  
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  

另請參閱

ALTER TRIGGER (Transact-SQL)
流程控制語言 (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
資料指標 (Transact-SQL)
SELECT (Transact-SQL)