使用 WHILE...BREAK 或 CONTINUE

只要指定的条件为 True 时,WHILE 语句就会重复语句或语句块。

下面两个 Transact-SQL 语句通常和 WHILE 一起使用:REAK 或 CONTINUE。BREAK 语句退出最内层的 WHILE 循环,CONTINUE 语句则重新开始 WHILE 循环。例如,如果没有其他行可以处理,程序可能执行 BREAK 语句。例如,如果要继续执行代码,则可以执行 CONTINUE 语句。

注意注意

如果将 SELECT 语句用作 WHILE 语句的条件,则 SELECT 语句必须在括号中。

示例

A. 在游标中使用 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')

B. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE

在以下示例中,如果产品的平均标价小于 $300,则 WHILE 循环将价格乘 2,然后选择最高价格。如果最高价格小于或等于 $500,则 WHILE 循环重新开始,并再次将价格乘 2。该循环不断地将价格乘 2,直到最高价格超过 $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';