- •Лекция 6. Алгоритмические конструкции t-sql. Хранимые процедуры. Переменные в Transact-sql
- •Объявление переменной
- •Циклическая конструкция
- •Конструкция waitfor
- •Блок try/catch
- •Комментарии
- •Функции Transact-sql
- •Скалярные функции
- •Математические функции
- •Строковые функции
- •Функции для работы с датами
- •Конфигурационные функции
- •Системные функции
- •Функции преобразования типов
- •Отладка кода в ManagementStudio
- •Хранимые процедуры
- •Понятие хранимой процедуры
- •Типы хранимых процедур
- •Создание, изменение и удаление хранимых процедур
- •Выполнение хранимой процедуры
Циклическая конструкция
Transact-SQLподдерживает единственный тип цикла – циклWHILE, синтаксис которого следующий:
WHILEусловие
Оператор
[BREAK|CONTINUE]
Замечание. Вертикальная черта в описании синтаксиса означает «или», т.е. в данном примере может быть указан либоBREAK, либоCONTINUE.
Тело цикла выполняется до тех пор, пока условие истинно. Цикл можно принудительно остановить, если выполнить в теле цикла команду BREAK. Если же нужно начать цикл заново, не дожидаясь выполнения команд тела цикла, необходимо выполнить командуCONTINUE.
Например:
DECLARE @i INTEGER;
SET @i=1
WHILE @i<100
BEGIN
INSERT INTO test_index(id, name) VALUES (@i, 'Строка № '+CAST(@i AS VARCHAR(3)));
SET @i=@i+1;
END
Конструкция waitfor
В некоторых случаях требуется отложить выполнение той или иной команды. Для этих целей можно воспользоваться оператором WAITFOR. Эта команда имеет следующий синтаксис:
WAITFOR DELAY <’time’> | TIME <’time’>
Если используется параметр DELAY, то указывается, сколько времени необходимо ждать MS SQLServer. Максимально возможная задержка – 24 часа. Пример использования: WAITFOR DELAY ‘01:00’, который приостановит выполнение на один час.
Если используется параметр TIME, то исполнение будет приостановлено до наступления заданного времени. Пример использования: WAITFOR TIME ‘01:00’ – приостановление выполнения кода до наступления часа ночи.
Например:
WAITFOR DELAY '00:00:05';
PRINT 'Пример задержки выполнения в 5 секунд';
Блок try/catch
Данную конструкцию можно использовать для обработки исключительных ситуаций. Впервые это конструкция появилась в MSSQLServer2005.
Блок TRY/CATCHвMSSQLServerработает также как и в других языках программирования. Используется следующий синтаксис:
BEGIN TRY
{ <выражения SQL> }
END TRY
BEGIN CATCH
{ <выражения SQL> }
END CATCH [ ; ]
В блоке BEGIN TRY... ENDTRYвыполняются потенциально опасные команды, если при этом произойдет ошибка уровня 11-19, то выполнение будет передано в блок CATCH.
Например:
DECLARE @i INT
DECLARE @r FLOAT
SET @i=-5
WHILE @i<5
BEGIN
BEGIN TRY
SET @r=10/@i
PRINT @r
END TRY
BEGIN CATCH
PRINT 'Невозможно выполнить операцию'
END CATCH
SET @i=@i+1
END
Комментарии
Существует два вида комментариев:
однострочные– в этом случае игнорируется текст справа от символов комментария: -- (двойной дефис);
многострочные – игнорируется текст, записанный между двумя парами символов: /* … */.
Функции Transact-sql
MSSQLServerимеет ряд встроенных функций для облегчения и ускорения обработки данных. Различают три типа функций:
функции наборов записей – результатом выполнения является объект, который может быть использован как таблица данных;
агрегатные функции– результатом является единственное значение заданного атрибута из некоторого множества записей;
скалярные функции– результатом также является одно значение из строго определенного набора аргументов.
Скалярные функции
Выделяют следующие категории скалярных функций – математические, строковые, для работы с датами, конфигурационные и системные. Рассмотрим каждую категорию.