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

Лекция 6. Алгоритмические конструкции t-sql. Хранимые процедуры. Переменные в Transact-sql

Любой объект базы данных должен обладать уникальным именем внутри этой базы. На основе имени происходит обращение к этому объекту. Имена объектов называются идентификаторами.Transact-SQLнакладывает ряд ограничений на порядок именования объектов:

  • первый символ имени должен быть одним из символов латинского алфавита (A-Z, a-z), либо символом @, # или _, т.е. не допускается использование цифр и прочих специальных символов. Остальная часть имени может включать любые символы алфавита, цифры и некоторые специальные символы;

  • общая длина имени обычного объекта не должна превышать 128 символов, для временных объектов – 116;

  • внутри имени запрещается использование пробелов, скобок и таких символов, как ~, !, %, ^, & и др.

  • имя объекта не должно совпадать с зарезервированным словом и с именем уже существующего объекта;

  • если имя объекта содержит пробелы или совпадает с зарезервированным словом, то его необходимо поместить внутрь квадратных скобок [ ].

Замечание:Transact-SQLявляетсяCASE-нечувствительным языком, т.е. не различает регистра символов.

Имена локальных переменных должны удовлетворять перечисленным правилам именования объектов и всегда должны начинаться с символа @. Область действия переменной ограничена пакетом операторов или процедурой, в которой она была объявлена.

Объявление переменной

Синтаксис команды (внутри квадратных скобок в описании синтаксиса располагаются необязательные элементы):

DECLARE @ИмяПеременной ТипДанных [ ,…n]

Пример объявления одной переменной:

DECLARE@sumint

Пример объявления нескольких переменных:

DECLARE@tempint, @countfloat

Присвоение значения

Синтаксис команды:

SET@ИмяПеременной = Выражение

Пример присвоения значения:

SET @sum = 0

SET@sum= @x/10 –целая часть от деления

SET@sum= @x%10 –остаток от деления

Инициализировать переменную можно сразу при объявлении, например:

DECLARE@iCounterint= 0

Управляющие конструкции Transact-SQL

Группировка команд

Группировка двух и более команд в единый блок осуществляется с помощью конструкции:

BEGIN

...

END

Такая группировка используется в условных и циклических конструкциях.

Конструкция ветвления

Выполнение той или иной группы команд в зависимости от выполнения или не выполнения некоторого условия реализуется с помощью конструкции:

IF<условие>

Оператор

[ELSE

Оператор ]

При отсутствии команд, выполняемых при несоблюдении условия, ключевое слово ELSEможно не указывать.

Следует отметить особенность проверки значений на NULL (специальный маркер, обозначающий отсутствие информации). Вместо обычного сравнения: IF @myvar = NULL, следует использовать оператор IS:IF @myvar IS NULL.

Конструкция CASE

Аналогична оператору CASEв языках программирования. ВMSSQLServer2008 оператор CASE имеет два возможных варианта использования.

  1. С входным выражением:

CASE <входное выражение>

WHEN<выражениеwhen>THEN<результат>

[...]

[ELSE <результат>]

END

Пример:

SELECT nameGr,

CASE Kurs WHEN 1 THEN '1 курс'

WHEN 2 THEN '2 курс'

WHEN 3 THEN '3 курс'

ELSE '4-5 курс' END

AS Курс

FROM Gr;

что равносильно:

SELECT nameGr, Курс=

CASE Kurs WHEN 1 THEN '1 курс'

WHEN 2 THEN '2 курс'

WHEN 3 THEN '3 курс'

ELSE '4-5 курс' END

FROM Gr

Результат запроса:

nameGr Курс

-------------------- --------

ИС-11 1 курс

ИС-22 2 курс

ИС-31 3 курс

ИС-41 4-5 курс

  1. Без входного выражения:

CASE

WHEN<логическое выражение>THEN<результат>

[...]

[ELSE <результат>]

END

Используется, как правило, для поиска.

Пример:

SELECT

sNameSt+' '+nameSt AS Студент,

CASE

WHEN DATEDIFF(YEAR,dateb,GETDATE()) <20 THEN 'Менее 20'

WHEN DATEDIFF(YEAR,dateb,GETDATE()) BETWEEN 20 AND 30 THEN 'От 20 до 30'

WHEN DATEDIFF(YEAR,dateb,GETDATE()) >30 THEN 'Более 30'

END AS 'Возрастная группа'

FROM STUDENT

Результат выполнения запроса:

Студент Возрастная группа

--------------------------------------------------- -----------------

Иванова Анна От 20 до 30

Смирнов Антон От 20 до 30

Семенова Евгения От 20 до 30

Бойченко Алексей От 20 до 30

Петров Александр От 20 до 30