Для написания скриптов и программирования функций и хранимых процедур используются операторы управления потоком Transact –SQL, которые не являются частью языка запросов SQL, а служат для управления выполнением хранимых процедур:
1. BEGIN…END – для создания блока последовательных команд; требуется для операторов типа WHILE.
2. IF…ELSE – для определения условия выбора команды или блока.
3. WHILE …BREAK…CONTINUE – для организации и управления циклически выполняемых команд.
3. Declare – создает локальную переменную;
5. Execute – выполняет хранимую процедуру
6. Goto – безусловный переход к метке;
7. Return – прекращает выполнение процедуры;
8. Break – выход из цикла WHILE.
1. BEGIN…END
Синтаксис:
BEGIN
Блок операторов (один или более операторов (иснтр WHILE укций))
END
Используются как операторные скобки для выделенияединого блока операторов, который может использоваться, например, в условном операторе. Последовательность операторов, заключенная в скобки beginи end, называется операторным блоком.
if (select avg(Цена) from Товары) < 1000
begin
update Товары
set Цена = Цена* 2
end
Операторный блок begin…endможно включать внутрь другого операторного блока begin…end.
2. IF…ELSE
Управляющая конструкция IF...ELSE используется для наложения условий, определяющих, какие операторы T-SQL нужно выполнить. Для IF...ELSE используется следующий синтаксис:
Булево выражение это выражение, значением которого является истина (TRUE) или ложь (FALSE). Оно может состоять из названий табличных столбцов и констант, соединенных арифметическими или булевскими операциями, или подзапросов, если эти подзапросы возвращают одно (скалярное) значение. Если булевское выражение содержит оператор выбора select, то этот оператор должен быть заключен в скобки и должен возвращать скалярное (невекторное) значение. Ключевое слово if(если), независимо от своего дополнения else(иначе), служит для указания условия, которое определяет нужно ли выполнять следующий оператор. Следующий оператор выполняется, если это условие истинно, т.е. если его значение равно TRUE (истина).
Ключевое слово elseслужит для указания альтернативного SQL оператора, который выполняется, если условие, указанное в конструкции ifоказалось ложным (FALSE).
3. WHILE …BREAK…CONTINUE
Команда while(до тех пор, пока) используется для циклического (повторного) выполнения оператора или блока операторов. Операторы выполнятся до тех пор, пока истинно указанное условие.
Эта команда имеет следующий вид:
while булевское_выражение
оператор
Следующий скрипт объявляет переменную целого типа, задаёт ей значение и выполняет цикл используя её в качестве счётчика.
DECLARE @Counter INT
set @Counter = 10
while @Counter > 0
begin
SET @Counter = @Counter - 1
end
В следующем примере операторы selectи updateбудут выполняться в цикле, пока средняя цена книги будет меньше 300:
while (select avg(Цена) from Книги) < 300
begin
select НомерКниги, Цена
from Книги
where Цена > 150
update Книги
set Цена = Цена* 2
end
Команды break(прервать) и continue(продолжить) управляют последовательностью выполнения операторов внутри цикла while. Команда breakпрекращает выполнение цикла. После этого управление передается оператору, следующему за ключевым словом end, которое указывает на конец цикла. Команда continue передает управление на начало цикла, поэтому все операторы, расположенные внутри цикла и следующие за этой командой, выполняться не будут. Командам breakи continueчасто предшествует проверка некоторого условия.
Синтаксис команд breakи continueимеет следующий вид:
while булевское_выражение
begin
оператор
….
[оператор]
break
[оператор]
….
continue
….
[оператор]
end
Далее приводится пример использования команд while, break, continueи if, в котором производится действие, обратное инфляционному действию предыдущего примера. До тех пор пока средняя цена книги остается большей 300, все цены уменьшаются наполовину. Затем выбирается максимальная цена. Если она меньше 600, то происходит выход из цикла, в противном случае цикл выполняется снова. Команда continueнедопустит выполнение оператора вывода (печати) print, если средняя цена меньше 300. После окончания цикла whileв этом примере выводится список книг, чья цена превышает 300 рублей .