- •Лекция 6. Алгоритмические конструкции t-sql. Хранимые процедуры. Переменные в Transact-sql
- •Объявление переменной
- •Циклическая конструкция
- •Конструкция waitfor
- •Блок try/catch
- •Комментарии
- •Функции Transact-sql
- •Скалярные функции
- •Математические функции
- •Строковые функции
- •Функции для работы с датами
- •Конфигурационные функции
- •Системные функции
- •Функции преобразования типов
- •Отладка кода в ManagementStudio
- •Хранимые процедуры
- •Понятие хранимой процедуры
- •Типы хранимых процедур
- •Создание, изменение и удаление хранимых процедур
- •Выполнение хранимой процедуры
Лекция 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 имеет два возможных варианта использования.
С входным выражением:
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 курс
Без входного выражения:
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