SQL - SQL Server 之WHILE迴圈的坑
阿新 • • 發佈:2020-12-15
設定重複執行 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!!!