WHILE (Transact-SQL)
更新: 2006 年 4 月 14 日
設定重複執行 SQL 陳述式或陳述式區塊的條件。只要符合指定的條件,就會重複執行這些陳述式。您可以在迴圈內,利用 BREAK 和 CONTINUE 關鍵字來控制 WHILE 迴圈陳述式的執行情況。
語法
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
請參閱
參考
ALTER TRIGGER (Transact-SQL)
流程控制語言 (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
資料指標 (Transact-SQL)
SELECT (Transact-SQL)
其他資源
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|