1. 程式人生 > 資料庫 >SQL - SQL Server 之WHILE迴圈的坑

SQL - SQL Server 之WHILE迴圈的坑

設定重複執行 SQL 語句或語句塊的條件。 只要指定的條件為真,就重複執行語句。 可以使用 BREAK 和 CONTINUE 關鍵字在迴圈內部控制 WHILE 迴圈中語句的執行。

語法

-- Syntax for SQL Server and Azure SQL Database  
  
WHILE Boolean_expression   
     { sql_statement | statement_block | BREAK | CONTINUE }

 

引數

Boolean_expression
返回 TRUE 或 FALSE 的 。 如果布林表示式中含有 SELECT 語句,則必須用括號將 SELECT 語句括起來。

{sql_statement | statement_block}
Transact-SQL 語句或用語句塊定義的語句分組。 若要定義語句塊,請使用控制流關鍵字 BEGIN 和 END。

BREAK
導致從最內層的 WHILE 迴圈中退出。 將執行出現在 END 關鍵字後面的任何語句,END 關鍵字為迴圈結束標記。

CONTINUE
使 WHILE 迴圈重新開始執行,忽略 CONTINUE 關鍵字後面的任何語句。

 

 

註解

如果嵌套了兩個或多個 WHILE 迴圈,則內層的 BREAK 將退出到下一個外層迴圈。 將首先執行內層迴圈結束之後的所有語句,然後重新開始下一個外層迴圈。

 

 

示例

A. 在巢狀的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE

在以下示例中,如果產品的平均標價小於 $300,則 WHILE 迴圈將價格乘 2,然後選擇最高價格。 如果最高價格小於或等於 $500,則 WHILE 迴圈重新開始,並再次將價格乘 2。 該迴圈不斷地將價格乘 2,直到最高價格超過 $500,然後退出 WHILE 迴圈,並輸出一條訊息。

USE AdventureWorks2012;  
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';

 

使用WHILE語句一定要記得加BREAK!!!