Управление ходом выполнения
Вы научитесь:
- использовать команду IF...ELSE для управления обработкой;
- использовать простую функцию CASE для возврата результатов на основании равенства одному из значений;
- использовать поисковую функцию CASE для возврата результатов на основе анализа булевых выражений;
- использовать команду GOTO для перехода к оператору в ходе выполнения;
- использовать цикл WHILE для многократного выполнения оператора или блока операторов;
- использовать фразу BREAK для выхода из цикла WHILE;
- использовать фразу CONTINUE для выполнения цикла WHILE сначала.
Transact-SQL обрабатывает операторы сценария от начала до конца, не пропуская ни один оператор, если не задано иное. Это не всегда то, что вам нужно. Иногда вам необходимо, чтобы оператор выполнялся, только если некоторое условие истинно, или повторялся, до тех пор, пока некоторое условие является истинным, или выполнялся указанное количество раз.
Команды управления ходом выполнения Transact-SQL предоставляют вам возможность реализации подобных требований; и команды управления ходом выполнения являются темой рассмотрения в этом уроке.
Блоки операторов
Когда вы приступаете к использованию операторов управления ходом выполнения Transact-SQL, удобно интерпретировать определенную группу команд как блок. Transact-SQL позволяет вам сделать это с помощью пары команд BEGIN...END.
Если за какой-либо командой управления ходом выполнения следует с ключевое слово BEGIN, Transact-SQL будет применять эту команду для всех операторов, расположенных между BEGIN и END.
В блок вы можете включить любой оператор Transact-SQL, в том числе другие блоки BEGIN...END, но здесь есть несколько ограничений. Вы не можете сочетать операторы CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER и CREATE VIEW с какими-либо другими операторами. Также вы не можете изменять структуру таблицы и затем ссылаться на новый столбец в этом же блоке.
Условное выполнение
Первая группа операторов управления ходом выполнения, которую мы рассмотрим, определяет порядок выполнения операторов на основе значения булева выражения. (Напомним, что булевы выражения работают с логическими значениями типа "истина" (TRUE) или "ложь" (FALSE)).
IF...ELSE
Оператор IF, является простейшим из набора команд управления ходом выполнения. Если булево выражение, следующее за командой IF, имеет значение TRUE, то будет выполнен оператор или блок операторов, следующий за этим. Если булево выражение имеет значение FALSE, то оператор или блок операторов, следующий за этим, будет пропущен.
Необязательная команда ELSE позволяет вам задавать оператор или блок операторов, который будет выполняться, только если булево выражение имеет значение FALSE. Например, команды Transact-SQL, представляемые ниже, возвращают 'Истина', если @test имеет значение "истина", и 'Ложь', если нет.
IF @test SELECT 'Истина' ELSE SELECT 'Ложь'
Совет. Операторы IF...ELSE могут быть вложены один в другой, образуя логическую структуру, схожую с конструкцией IF...ELSEIF...ELSE, принятой в других языках программирования. Однако следует остерегаться использовать этот прием в простых случаях. Тот же эффект можно достичь путем использования оператора CASE, который мы рассмотрим далее. При этом оценить ход выполнения будет легче.
Используйте структуру IF...ELSE для управления выполнением
- В панели инструментов анализатора запросов Query Analyzer нажмите кнопку New Query (Новый запрос) для открытия нового окна Query (Запрос).
- В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).
- В корневой директории найдите папку SQL 2000 Step by Step, выберите сценарий с именем IF-ELSE.sql и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.
Совет. Этот сценарий использует команду PRINT для отображения сообщений на вкладке Messages (Сообщения) окна запроса Query. Команда PRINT полезна, когда вы впервые разрабатываете сценарий, в реальных же приложениях вы редко будете ее использовать.
- В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).Query Analyzer выполнит запрос и отобразит панель сетки Grids Pane.
- Выберите вкладку Messages (Сообщения). Query Analyzer отобразит результат выполнения оператора IF...ELSE.