• 03/15/2017
  • Чтение занимает 2 мин

В этой статье

Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse

Ставит условие повторного выполнения SQL-инструкции или блока инструкций.Sets a condition for the repeated execution of an SQL statement or statement block. Эти инструкции вызываются в цикле, пока указанное условие истинно.The statements are executed repeatedly as long as the specified condition is true. Вызовами инструкций в цикле WHILE можно контролировать из цикла с помощью ключевых слов BREAK и CONTINUE.The execution of statements in the WHILE loop can be controlled from inside the loop with the BREAK and CONTINUE keywords.

Синтаксические обозначения в Transact-SQLTransact-SQL Syntax Conventions

СинтаксисSyntax

— Syntax for SQL Server and Azure SQL Database

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 }

АргументыArguments

Boolean_expressionBoolean_expression
Выражение, возвращающее значение TRUE или FALSE.Is an expression that returns TRUE or FALSE. Если логическое выражение содержит инструкцию SELECT, инструкция SELECT должна быть заключена в скобки.If the Boolean expression contains a SELECT statement, the SELECT statement must be enclosed in parentheses.

{sql_statement | statement_block}{sql_statement | statement_block}
Любая инструкция или группа инструкций Transact-SQLTransact-SQL, определенная в виде блока инструкций.Is any Transact-SQLTransact-SQL statement or statement grouping as defined with a statement block. Для определения блока инструкций используйте ключевые слова потока управления BEGIN и END.To define a statement block, use the control-of-flow keywords BEGIN and END.

BREAKBREAK
Приводит к выходу из ближайшего цикла WHILE.Causes an exit from the innermost WHILE loop. Вызываются инструкции, следующие за ключевым словом END, обозначающим конец цикла.Any statements that appear after the END keyword, marking the end of the loop, are executed.

CONTINUECONTINUE
Выполняет цикл WHILE для перезагрузки, не учитывая все инструкции, следующие после ключевого слова CONTINUE.Causes the WHILE loop to restart, ignoring any statements after the CONTINUE keyword.

Если вложенными являются два цикла WHILE или более, внутренний оператор BREAK существует до следующего внешнего цикла.If two or more WHILE loops are nested, the inner BREAK exits to the next outermost loop. Все инструкции после окончания внутреннего цикла выполняются в первую очередь, а затем перезапускается следующий внешний цикл.All the statements after the end of the inner loop run first, and then the next outermost loop restarts.

ПримерыExamples

A.A. Использование ключевых слов BREAK и CONTINUE внутри вложенных конструкций IF…ELSE и WHILEUsing BREAK and CONTINUE with nested IF…ELSE and WHILE

В следующем примере в случае, если средняя цена продуктов из списка меньше чем $300, цикл WHILE удваивает цены, а затем выбирает максимальную.In the following example, if the average list price of a product is less than $300, the WHILE loop doubles the prices and then selects the maximum price. В том случае, если максимальная цена меньше или равна $500, цикл WHILE повторяется и снова удваивает цены.If the maximum price is less than or equal to $500, the WHILE loop restarts and doubles the prices again. Этот цикл продолжает удваивать цены до тех пор, пока максимальная цена не будет больше чем $500, затем выполнение цикла WHILE прекращается, о чем выводится соответствующее сообщение.This loop continues doubling the prices until the maximum price is greater than $500, and then exits the WHILE loop and prints a message.

USE AdventureWorks2012;
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 в курсореUsing WHILE in a cursor

В следующем примере используется переменная @@FETCH_STATUS для управления действиями курсора в цикле WHILE.The following example uses @@FETCH_STATUS to control cursor activities in a WHILE loop.

DECLARE @EmployeeID as NVARCHAR(256)
DECLARE @Title as NVARCHAR(50)

DECLARE Employee_Cursor CURSOR FOR
SELECT LoginID, JobTitle
FROM AdventureWorks2012.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 AnalyticsAzure Synapse Analytics и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Параллельное хранилище данныхParallel Data Warehouse

В. Простой цикл WhileC: Simple While Loop

В следующем примере в случае, если средняя цена продуктов из списка меньше чем $300, цикл WHILE удваивает цены, а затем выбирает максимальную.In the following example, if the average list price of a product is less than $300, the WHILE loop doubles the prices and then selects the maximum price. В том случае, если максимальная цена меньше или равна $500, цикл WHILE повторяется и снова удваивает цены.If the maximum price is less than or equal to $500, the WHILE loop restarts and doubles the prices again. Этот цикл продолжает удваивать цены до тех пор, пока максимальная цена не будет больше, чем $500, после чего выполнение цикла WHILE прекращается.This loop continues doubling the prices until the maximum price is greater than $500, and then exits the WHILE loop.

— 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

См. такжеSee Also

ALTER TRIGGER (Transact-SQL) ALTER TRIGGER (Transact-SQL)
Язык управления потоком (Transact-SQL) Control-of-Flow Language (Transact-SQL)
CREATE TRIGGER (Transact-SQL) CREATE TRIGGER (Transact-SQL)
Курсоры (Transact-SQL) Cursors (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)