IF...ELSE для управления обработкой;CASE для возврата результатов на основании равенства одному из значений;CASE для возврата результатов на основе анализа булевых выражений;GOTO для перехода к оператору в ходе выполнения;WHILE для многократного выполнения оператора или BREAK для выхода из цикла WHILE;CONTINUE для выполнения цикла WHILE сначала.Transact-SQL обрабатывает операторы сценария от начала до конца, не пропуская ни один оператор, если не задано иное. Это не всегда то, что вам нужно. Иногда вам необходимо, чтобы оператор выполнялся, только если некоторое условие истинно, или повторялся, до тех пор, пока некоторое условие является истинным, или выполнялся указанное количество раз.
Команды управления ходом выполнения Transact-SQL предоставляют вам возможность реализации подобных требований; и команды управления ходом выполнения являются темой рассмотрения в этом уроке.
Блоки операторов
Когда вы приступаете к использованию BEGIN...END.
Если за какой-либо командой управления ходом выполнения следует с ключевое слово BEGIN, Transact-SQL будет применять эту команду для всех операторов, расположенных между BEGIN и END.
В блок вы можете включить любой оператор Transact-SQL, в том числе другие блоки BEGIN...END, но здесь есть несколько ограничений. Вы не можете сочетать операторы CREATE DEFAULT, и с какими-либо другими операторами. Также вы не можете изменять структуру таблицы и затем ссылаться на новый столбец в этом же блоке.
Первая группа
Оператор IF, является простейшим из набора команд управления ходом выполнения. Если булево выражение, следующее за командой IF, имеет значение TRUE, то будет выполнен оператор или FALSE, то оператор или
Необязательная команда ELSE позволяет вам задавать оператор или FALSE. Например, команды Transact-SQL, представляемые ниже, возвращают 'Истина', если @test имеет значение "истина", и 'Ложь', если нет.
IF @test SELECT 'Истина' ELSE SELECT 'Ложь'
Совет. Операторы IF...ELSE могут быть вложены один в другой, образуя логическую структуру, схожую с конструкцией IF..., принятой в других языках программирования. Однако следует остерегаться использовать этот прием в простых случаях. Тот же эффект можно достичь путем использования оператора CASE, который мы рассмотрим далее. При этом оценить ход выполнения будет легче.
Используйте структуру IF...ELSE для управления выполнением

Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

Совет. Этот сценарий использует команду PRINT для отображения сообщений на вкладке Messages (Сообщения) окна запроса Query. Команда PRINT полезна, когда вы впервые разрабатываете сценарий, в реальных же приложениях вы редко будете ее использовать.
Query Analyzer выполнит запрос и отобразит панель сетки Grids Pane.
В большинстве языков программирования оператор CASE является расширенной формой оператора IF, которая позволяет вам определять множество булевых выражений в одном операторе. В SQL Server CASE является функцией, а не командой. Она используется не сама по себе, как IF. а как часть оператора SELECT или UPDATE.
Операторы, включающие в себя структуру CASE, могут использовать одну из двух синтаксических форм, в зависимости от того, будет ли изменяться оцениваемое выражение. Простейшая форма в предположении, что всегда будет оцениваться булево выражение, имеет следующий вид:
значение = выражение
Значение может быть сколь угодно сложным. Вы можете использовать константу, имя столбца, или составное выражение, если необходимо. В качестве оператора сравнения всегда используется равенство. Синтаксис простой структуры CASE представлен ниже:
CASE значение WHEN выражение_один THEN результирующее_выражение_один WHEN выражение_два THEN результирующее_выражение_два . . . WHEN выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END
В этой форме функции CASE, выражение результирующее_выражение возвращается, только в том случае, если выражение, следующее за ключевым словом WHEN, логически равно указанному значению. Вы можете использовать в выражение любое количество фраз WHEN. Фраза ELSE необязательна – она выполняется, только если все фразы WHEN оцениваются как FALSE.
Сравнение одного значения с некоторым количеством других значений является типичной задачей, но иногда вам требуется большая степень гибкости. В это случае вы можете воспользоваться так называемым поисковым синтаксисом функции CASE Transact-SQL, который имеет следующий вид:
CASE WHEN булево_выражение_один THEN результирующее_выражение_один WHEN булево_выражение_два THEN результирующее_выражение_два . . . WHEN булево_выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END
В этой форме CASE вы можете указать целое булево выражение в каждой фразе WHEN вместо неявного сравнения выражения в простой форме. Учтите, что при определении истинности можно оценивать несколько булевых_выражений. Transact-SQL возвратит только первое результирующее_выражение, а затем перейдет к оператору, следующему за END.
Используйте простую структуру CASE
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).

Query Analyzer отобразит результат выполнения запроса.
Используйте поисковую форму структуры CASE
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

Query Analyzer отобразит результат выполнения запроса. Обратите внимание, что хотя третья запись, содержащая в качестве значения поля OilName 'Bergamot', отвечает условию для второй фразы WHEN (LEFT(LatinName,1) = 'C'), она возвращает в качестве значения поля TestResults 'Name B', поскольку она отвечает и первому булевому выражению.
Структуры IF...ELSE и CASE управляют порядком выполнения операторов, основываясь на результатах вычисления булевого выражения. Команда GOTO является безусловной. Она передает выполнение непосредственно к оператору, следующему после метки, которая на него указывает.
В SQL Server метки являются неисполняемыми операторами, имеющими следующий синтаксис:
имя_метки:
Имя метки должно удовлетворять правилам, принятым для идентификаторов. Сама команда GOTO имеет очень простой синтаксис:
GOTO имя_метки
Код "спагетти"
GOTO является весьма непопулярной в кругу программистов командой. По большому счету это связано с историческими причинами: ранние языки предоставляли очень мало механизмов управления ходом выполнения – обычно только структуру IF и команду GOTO. Как следствие, создаваемый код оказывался очень сложным для восприятия и анализа. Подобный код получил название "спагетти".
Применение команды GOTO, тем не менее, бывает вполне оправданным, особенно при обработке ошибок. Если вы будете аккуратно использовать эту команду, она даже сможет сделать код проще для понимания. Следует всего лишь следить, что вы использовали команду GOTO для выполнения задач, которые могут быть более просто выражены через другие команды или функции передачи управления.
Используйте команду GOTO для безусловного перехода
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открыть файл запроса).
Query Analyzer отобразит результат запроса.
Последняя из команд управления ходом выполнения позволяет вам выполнять оператор или
Простейшая форма цикла WHILE содержит булево выражение и оператор или FALSE. Если при первой оценке булево выражение имеет значение FALSE, то оператор или
Используйте простой цикл WHILE
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

Query Analyzer отобразит результат запроса.
Синтаксис оператора WHILE также позволяет вам осуществлять и более сложную логику выполнения, в отличие от простой логики в предыдущем примере. Фраза BREAK вызывает выход из цикла; выполнение продолжается с оператора, следующего за фразой END блока оператора структуры WHILE. Фраза CONTINUE возвращает выполнение на начало цикла, при этом операторы, следующие за CONTINUE в пределах BREAK и CONTINUE, обычно выполняются как условные в пределах оператора IF.
Если вам потребуется, вы можете использовать команды BREAK и CONTINUE в одном и том же операторе WHILE. Вы также можете использовать каждую команду несколько раз внутри
Используйте структуру WHILE...BREAK
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
Query Analyzer отобразит результат выполнения запроса.
Используйте структуру WHILE...CONTINUE
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
Query Analyzer отобразит результат выполнения запроса.
| Чтобы... | Синтаксис оператора SQL |
|---|---|
| Выполнить оператор по условию | IF Булево_выражение Оператор_или_блок [ELSE оператор_или_блок] |
| Вернуть условные результаты в операторе SELECT или UPDATE на основе эквивалентности одного значения | CASE значение WHEN выр_один THEN рез_выр_один WHEN выр_два THEN рез_выр_два WHEN выр_n THEN рез_выр_n [ELSE альт_рез_выр] END |
| Вернуть условные результаты в операторе SELECT или UPDATE на основе значения булевого выражения | CASE WHEN Булево_один THEN рез_выр_один WHEN Булево_два THEN рез_выр_два WHEN Булево_n THEN рез_выр_n [ELSE альт_рез_выр] END |
| Безусловно передавать управление | GOTO имя_метки имя_метки: |
| Повторять оператор или |
WHILE Булево_выр оператор_или_блок |
| Выйти из цикла WHILE | WHILE Булево_выр BEGIN BREAK END |
| Вернуться к началу цикла WHILE | WHILE Булево_выр BEGIN CONTINUE END |
IF...ELSE для управления обработкой;CASE для возврата результатов на основании равенства одному из значений;CASE для возврата результатов на основе анализа булевых выражений;GOTO для перехода к оператору в ходе выполнения;WHILE для многократного выполнения оператора или BREAK для выхода из цикла WHILE;CONTINUE для выполнения цикла WHILE сначала.Transact-SQL обрабатывает операторы сценария от начала до конца, не пропуская ни один оператор, если не задано иное. Это не всегда то, что вам нужно. Иногда вам необходимо, чтобы оператор выполнялся, только если некоторое условие истинно, или повторялся, до тех пор, пока некоторое условие является истинным, или выполнялся указанное количество раз.
Команды управления ходом выполнения Transact-SQL предоставляют вам возможность реализации подобных требований; и команды управления ходом выполнения являются темой рассмотрения в этом уроке.
Блоки операторов
Когда вы приступаете к использованию BEGIN...END.
Если за какой-либо командой управления ходом выполнения следует с ключевое слово BEGIN, Transact-SQL будет применять эту команду для всех операторов, расположенных между BEGIN и END.
В блок вы можете включить любой оператор Transact-SQL, в том числе другие блоки BEGIN...END, но здесь есть несколько ограничений. Вы не можете сочетать операторы CREATE DEFAULT, и с какими-либо другими операторами. Также вы не можете изменять структуру таблицы и затем ссылаться на новый столбец в этом же блоке.
Первая группа
Оператор IF, является простейшим из набора команд управления ходом выполнения. Если булево выражение, следующее за командой IF, имеет значение TRUE, то будет выполнен оператор или FALSE, то оператор или
Необязательная команда ELSE позволяет вам задавать оператор или FALSE. Например, команды Transact-SQL, представляемые ниже, возвращают 'Истина', если @test имеет значение "истина", и 'Ложь', если нет.
IF @test SELECT 'Истина' ELSE SELECT 'Ложь'
Совет. Операторы IF...ELSE могут быть вложены один в другой, образуя логическую структуру, схожую с конструкцией IF..., принятой в других языках программирования. Однако следует остерегаться использовать этот прием в простых случаях. Тот же эффект можно достичь путем использования оператора CASE, который мы рассмотрим далее. При этом оценить ход выполнения будет легче.
Используйте структуру IF...ELSE для управления выполнением

Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

Совет. Этот сценарий использует команду PRINT для отображения сообщений на вкладке Messages (Сообщения) окна запроса Query. Команда PRINT полезна, когда вы впервые разрабатываете сценарий, в реальных же приложениях вы редко будете ее использовать.
Query Analyzer выполнит запрос и отобразит панель сетки Grids Pane.
В большинстве языков программирования оператор CASE является расширенной формой оператора IF, которая позволяет вам определять множество булевых выражений в одном операторе. В SQL Server CASE является функцией, а не командой. Она используется не сама по себе, как IF. а как часть оператора SELECT или UPDATE.
Операторы, включающие в себя структуру CASE, могут использовать одну из двух синтаксических форм, в зависимости от того, будет ли изменяться оцениваемое выражение. Простейшая форма в предположении, что всегда будет оцениваться булево выражение, имеет следующий вид:
значение = выражение
Значение может быть сколь угодно сложным. Вы можете использовать константу, имя столбца, или составное выражение, если необходимо. В качестве оператора сравнения всегда используется равенство. Синтаксис простой структуры CASE представлен ниже:
CASE значение WHEN выражение_один THEN результирующее_выражение_один WHEN выражение_два THEN результирующее_выражение_два . . . WHEN выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END
В этой форме функции CASE, выражение результирующее_выражение возвращается, только в том случае, если выражение, следующее за ключевым словом WHEN, логически равно указанному значению. Вы можете использовать в выражение любое количество фраз WHEN. Фраза ELSE необязательна – она выполняется, только если все фразы WHEN оцениваются как FALSE.
Сравнение одного значения с некоторым количеством других значений является типичной задачей, но иногда вам требуется большая степень гибкости. В это случае вы можете воспользоваться так называемым поисковым синтаксисом функции CASE Transact-SQL, который имеет следующий вид:
CASE WHEN булево_выражение_один THEN результирующее_выражение_один WHEN булево_выражение_два THEN результирующее_выражение_два . . . WHEN булево_выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END
В этой форме CASE вы можете указать целое булево выражение в каждой фразе WHEN вместо неявного сравнения выражения в простой форме. Учтите, что при определении истинности можно оценивать несколько булевых_выражений. Transact-SQL возвратит только первое результирующее_выражение, а затем перейдет к оператору, следующему за END.
Используйте простую структуру CASE
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).

Query Analyzer отобразит результат выполнения запроса.
Используйте поисковую форму структуры CASE
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

Query Analyzer отобразит результат выполнения запроса. Обратите внимание, что хотя третья запись, содержащая в качестве значения поля OilName 'Bergamot', отвечает условию для второй фразы WHEN (LEFT(LatinName,1) = 'C'), она возвращает в качестве значения поля TestResults 'Name B', поскольку она отвечает и первому булевому выражению.
Структуры IF...ELSE и CASE управляют порядком выполнения операторов, основываясь на результатах вычисления булевого выражения. Команда GOTO является безусловной. Она передает выполнение непосредственно к оператору, следующему после метки, которая на него указывает.
В SQL Server метки являются неисполняемыми операторами, имеющими следующий синтаксис:
имя_метки:
Имя метки должно удовлетворять правилам, принятым для идентификаторов. Сама команда GOTO имеет очень простой синтаксис:
GOTO имя_метки
Код "спагетти"
GOTO является весьма непопулярной в кругу программистов командой. По большому счету это связано с историческими причинами: ранние языки предоставляли очень мало механизмов управления ходом выполнения – обычно только структуру IF и команду GOTO. Как следствие, создаваемый код оказывался очень сложным для восприятия и анализа. Подобный код получил название "спагетти".
Применение команды GOTO, тем не менее, бывает вполне оправданным, особенно при обработке ошибок. Если вы будете аккуратно использовать эту команду, она даже сможет сделать код проще для понимания. Следует всего лишь следить, что вы использовали команду GOTO для выполнения задач, которые могут быть более просто выражены через другие команды или функции передачи управления.
Используйте команду GOTO для безусловного перехода
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открыть файл запроса).
Query Analyzer отобразит результат запроса.
Последняя из команд управления ходом выполнения позволяет вам выполнять оператор или
Простейшая форма цикла WHILE содержит булево выражение и оператор или FALSE. Если при первой оценке булево выражение имеет значение FALSE, то оператор или
Используйте простой цикл WHILE
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

Query Analyzer отобразит результат запроса.
Синтаксис оператора WHILE также позволяет вам осуществлять и более сложную логику выполнения, в отличие от простой логики в предыдущем примере. Фраза BREAK вызывает выход из цикла; выполнение продолжается с оператора, следующего за фразой END блока оператора структуры WHILE. Фраза CONTINUE возвращает выполнение на начало цикла, при этом операторы, следующие за CONTINUE в пределах BREAK и CONTINUE, обычно выполняются как условные в пределах оператора IF.
Если вам потребуется, вы можете использовать команды BREAK и CONTINUE в одном и том же операторе WHILE. Вы также можете использовать каждую команду несколько раз внутри
Используйте структуру WHILE...BREAK
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
Query Analyzer отобразит результат выполнения запроса.
Используйте структуру WHILE...CONTINUE
Query Analyzer очистит окно.
Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).
Query Analyzer отобразит результат выполнения запроса.
| Чтобы... | Синтаксис оператора SQL |
|---|---|
| Выполнить оператор по условию | IF Булево_выражение Оператор_или_блок [ELSE оператор_или_блок] |
| Вернуть условные результаты в операторе SELECT или UPDATE на основе эквивалентности одного значения | CASE значение WHEN выр_один THEN рез_выр_один WHEN выр_два THEN рез_выр_два WHEN выр_n THEN рез_выр_n [ELSE альт_рез_выр] END |
| Вернуть условные результаты в операторе SELECT или UPDATE на основе значения булевого выражения | CASE WHEN Булево_один THEN рез_выр_один WHEN Булево_два THEN рез_выр_два WHEN Булево_n THEN рез_выр_n [ELSE альт_рез_выр] END |
| Безусловно передавать управление | GOTO имя_метки имя_метки: |
| Повторять оператор или |
WHILE Булево_выр оператор_или_блок |
| Выйти из цикла WHILE | WHILE Булево_выр BEGIN BREAK END |
| Вернуться к началу цикла WHILE | WHILE Булево_выр BEGIN CONTINUE END |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.