The Wayback Machine - http://web.archive.org/web/20120701162113/http://msdn.microsoft.com:80/zh-tw/library/ms178642(v=sql.90).aspx
本主題尚未接受評分 - 為這個主題評分

WHILE (Transact-SQL)

更新: 2006 年 4 月 14 日

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

主題連結圖示 Transact-SQL 語法慣例


WHILE Boolean_expression 
     { sql_statement | statement_block } 
     [ BREAK ] 
     { sql_statement | statement_block } 
     [ CONTINUE ] 
     { sql_statement | statement_block } 

Boolean_expression

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

{sql_statement | statement_block}

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

BREAK

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

CONTINUE

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

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

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

在下列範例中,如果產品的平均標價小於 $300,WHILE 迴圈會將標價加倍,再設定最大價格。如果最大價格小於或等於 $500,WHILE 迴圈會重新啟動,價格會再加倍。這個迴圈會繼續使價格加倍,直到最大價格大於 $500,再結束 WHILE 迴圈及列印訊息。

USE AdventureWorks;
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 Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title 
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID =3;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO

版本 歷程記錄

2006 年 4 月 14 日

新增內容:
  • 取代範例 B。
本文對您有任何幫助嗎?
(剩餘 1500 個字元)
社群內容 新增
Image
Microsoft 正展開一份線上問卷調查,了解您對於 MSDN 網站的看法。 如果您選擇參加,您離開 MSDN 網站時即會顯示線上問卷調查。

您是否想要參加?