使用 WHILE...BREAK 或 CONTINUE
只要指定的條件為真,WHILE 陳述式能將一個陳述式或陳述式區塊重複執行。
有兩個 Transact-SQL 陳述式經常與 WHILE 合用:BREAK 或 CONTINUE。BREAK 陳述式可由最內層的 WHILE 迴圈跳出,而 CONTINUE 陳述式則重新啟動 WHILE 迴圈。在沒有其他資料列需要執行的情況下,程式會執行 BREAK 陳述式。在需要繼續執行程式碼的情況下,程式會執行 CONTINUE 陳述式。
[!附註]
如果 WHILE 陳述式中使用 SELECT 陳述式當作條件,必須將 SELECT 陳述式放在括號內。
範例
在資料指標中使用 WHILE
下列範例使用 WHILE 陳述式控制提取的完成次數。
USE AdventureWorks2008R2;
GO
DECLARE abc CURSOR FOR
SELECT * FROM Purchasing.ShipMethod;
OPEN abc;
FETCH NEXT FROM abc
WHILE (@@FETCH_STATUS = 0)
FETCH NEXT FROM abc;
CLOSE abc;
DEALLOCATE abc;
GO
以下介紹其他有效的 WHILE 條件測試:
WHILE (@ACounterVariable < 100)
或
WHILE EXISTS(SELECT LastName FROM Person.Person WHERE FirstName = N'Anne')
搭配巢狀 IF...ELSE 和 WHILE 來使用 BREAK 和 CONTINUE
在下列範例中,如果產品的平均標價小於 $300,WHILE 迴圈會將標價加倍,再選取最大價格。如果最大價格小於或等於 $500,WHILE 迴圈會重新啟動,價格會再加倍。這個迴圈會繼續使價格加倍,直到最大價格大於 $500,再結束 WHILE 迴圈及列印訊息。
USE AdventureWorks2008R2;
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';