使用 WHILE...BREAK 或 CONTINUE
只要指定的条件为 True 时,WHILE 语句就会重复语句或语句块。
下面两个 Transact-SQL 语句通常和 WHILE 一起使用:REAK 或 CONTINUE。BREAK 语句退出最内层的 WHILE 循环,CONTINUE 语句则重新开始 WHILE 循环。例如,如果没有其他行可以处理,程序可能执行 BREAK 语句。例如,如果要继续执行代码,则可以执行 CONTINUE 语句。
注意 |
---|
如果将 SELECT 语句用作 WHILE 语句的条件,则 SELECT 语句必须在括号中。 |
示例
A. 在游标中使用 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')
B. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE
在以下示例中,如果产品的平均标价小于 $300,则 WHILE 循环将价格乘 2,然后选择最高价格。如果最高价格小于或等于 $500,则 WHILE 循环重新开始,并再次将价格乘 2。该循环不断地将价格乘 2,直到最高价格超过 $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';