WHILE (Transact-SQL)
适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库
设置重复执行 SQL 语句或语句块的条件。 只要指定的条件为真,就重复执行语句。 可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。
语法
-- Syntax for SQL Server and Azure SQL Database and Microsoft Fabric
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
-- Syntax for Azure Azure Synapse Analytics and Parallel Data Warehouse
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK }
注意
若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档。
参数
Boolean_expression
返回 TRUE 或 FALSE 的表达式 。 如果布尔表达式中含有 SELECT 语句,则必须用括号将 SELECT 语句括起来。
{sql_statement | statement_block}
Transact-SQL 语句或用语句块定义的语句分组。 若要定义语句块,请使用控制流关键字 BEGIN 和 END。
BREAK
导致从最内层的 WHILE 循环中退出。 将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束标记。
CONTINUE
使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后面的任何语句。
注解
如果嵌套了两个或多个 WHILE 循环,则内层的 BREAK 将退出到下一个外层循环。 将首先运行内层循环结束之后的所有语句,然后重新开始下一个外层循环。
示例
A. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE
在以下示例中,如果产品的平均标价小于 $300
,则 WHILE
循环将价格乘 2,然后选择最高价格。 如果最高价格小于或等于 $500
,则 WHILE
循环重新开始,并再次将价格乘 2。 该循环不断地将价格乘 2,直到最高价格超过 $500
,然后退出 WHILE
循环,并输出一条消息。
USE AdventureWorks2022;
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 @EmployeeID as NVARCHAR(256)
DECLARE @Title as NVARCHAR(50)
DECLARE Employee_Cursor CURSOR FOR
SELECT LoginID, JobTitle
FROM AdventureWorks2022.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor INTO @EmployeeID, @Title;
WHILE @@FETCH_STATUS = 0
BEGIN
Print ' ' + @EmployeeID + ' '+ @Title
FETCH NEXT FROM Employee_Cursor INTO @EmployeeID, @Title;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
C. 简单 While 循环
在以下示例中,如果产品的平均标价小于 $300
,则 WHILE
循环将价格乘 2,然后选择最高价格。 如果最高价格小于或等于 $500
,则 WHILE
循环重新开始,并再次将价格乘 2。 该循环不断地将价格乘 2,直到最高价格超过 $500
,然后退出 WHILE
循环。
-- Uses AdventureWorks
WHILE ( SELECT AVG(ListPrice) FROM dbo.DimProduct) < $300
BEGIN
UPDATE dbo.DimProduct
SET ListPrice = ListPrice * 2;
SELECT MAX ( ListPrice) FROM dbo.DimProduct
IF ( SELECT MAX (ListPrice) FROM dbo.DimProduct) > $500
BREAK;
END
另请参阅
ALTER TRIGGER (Transact-SQL)
控制流语言 (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
游标 (Transact-SQL)
SELECT (Transact-SQL)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈