Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд / Лекция 7 - Алгоритмические конструкции, хранимые процедуры.docx
Скачиваний:
32
Добавлен:
14.05.2015
Размер:
45.98 Кб
Скачать

Циклическая конструкция

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имеет ряд встроенных функций для облегчения и ускорения обработки данных. Различают три типа функций:

  • функции наборов записей – результатом выполнения является объект, который может быть использован как таблица данных;

  • агрегатные функции– результатом является единственное значение заданного атрибута из некоторого множества записей;

  • скалярные функции– результатом также является одно значение из строго определенного набора аргументов.

Скалярные функции

Выделяют следующие категории скалярных функций – математические, строковые, для работы с датами, конфигурационные и системные. Рассмотрим каждую категорию.