WHILE (Transact-SQL)
Изменения: 14 апреля 2006 г.
Ставит условие повторного выполнения SQL-инструкции или блока инструкций. Эти инструкции вызываются в цикле, пока указанное условие истинно. Вызовами инструкций в цикле WHILE можно контролировать из цикла с помощью ключевых слов BREAK и CONTINUE.
Соглашение о синтаксисе в Transact-SQL
Синтаксис
WHILE Boolean_expression
{ sql_statement | statement_block }
[ BREAK ]
{ sql_statement | statement_block }
[ CONTINUE ]
{ sql_statement | statement_block }
Аргументы
- Boolean_expression
Выражение, которое возвращает либо TRUE, либо FALSE. Если логическое выражение содержит инструкцию SELECT, то инструкция SELECT должна быть заключена в скобки.
- {sql_statement | statement_block}
Любая инструкция или группа инструкций Transact-SQL, определенная в виде блока инструкций. Для определения блока инструкций необходимо использовать ключевые слова потока управления BEGIN и END.
- BREAK
Приводит к выходу из ближайшего цикла WHILE. Вызываются инструкции, следующие за ключевым словом END, обозначающим конец цикла.
- CONTINUE
Производит переход на начало цикла, игнорируя все инструкции, следующие после ключевого слова CONTINUE.
Замечания
В случае с двумя или более вложенными циклами внутренний оператор BREAK прекращает выполнение ближайшего к нему цикла и переходит к инструкциям, расположенным после внутреннего цикла. Внешний цикл продолжает свою работу.
Примеры
А. Использование ключевых слов BREAK и CONTINUE внутри вложенных конструкций IF...ELSE и WHILE
В следующем примере в случае, если средняя цена продуктов из списка меньше чем $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';
Б. Применение цикла WHILE в курсоре
В следующем примере используется переменная @@FETCH_STATUS
для управления действиями курсора в цикле WHILE
.
DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID =3;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
См. также
Справочник
ALTER TRIGGER (Transact-SQL)
Язык управления потоком (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
Курсоры (Transact-SQL)
SELECT (Transact-SQL)
Другие ресурсы
Использование инструкций WHILE...BREAK или CONTINUE
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
14 апреля 2006 г. |
|