WHILE (Transact-SQL)
設定重複執行 SQL 陳述式或陳述式區塊的條件。 只要符合指定的條件,就會重複執行這些陳述式。 您可以在迴圈內,利用 BREAK 和 CONTINUE 關鍵字來控制 WHILE 迴圈陳述式的執行情況。
語法
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 關鍵字 (表示迴圈結束) 之後的任何陳述式。CONTINUE
重新啟動 WHILE 迴圈,忽略 CONTINUE 關鍵字之後的任何陳述式。
備註
如果一個或多個 WHILE 迴圈具有巢狀結構,內層的 BREAK 會跳到下一個最外層的迴圈。 內層迴圈尾端之後的所有陳述式會先執行,然後重新啟動下一個最外層迴圈。
範例
A.使用 BREAK 和 CONTINUE 搭配巢狀 IF...ELSE 和 WHILE
在下列範例中,如果產品的平均標價小於 $300,WHILE 迴圈會將標價加倍,再選取最大價格。 如果最大價格小於或等於 $500,WHILE 迴圈會重新啟動,價格會再加倍。 這個迴圈會繼續使價格加倍,直到最大價格大於 $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';
B.在資料指標中使用 WHILE
下列範例使用 @@FETCH_STATUS 控制 WHILE 迴圈中的資料指標活動。
DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title
FROM AdventureWorks2012.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
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