使用 WHILE...BREAK 或 CONTINUE

只要指定的條件為真,WHILE 陳述式能將一個陳述式或陳述式區塊重複執行。

有兩個 Transact-SQL 陳述式經常與 WHILE 合用:BREAK 或 CONTINUE。BREAK 陳述式可由最內層的 WHILE 迴圈跳出,而 CONTINUE 陳述式則重新啟動 WHILE 迴圈。在沒有其他資料列需要執行的情況下,程式會執行 BREAK 陳述式。在需要繼續執行程式碼的情況下,程式會執行 CONTINUE 陳述式。

[!附註]

如果 WHILE 陳述式中使用 SELECT 陳述式當作條件,必須將 SELECT 陳述式放在括號內。

範例

在資料指標中使用 WHILE

下列範例使用 WHILE 陳述式控制提取的完成次數。

USE AdventureWorks;
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.Contact WHERE FirstName = N'Anne')

搭配巢狀 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';