Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 3. Общие сведения о Transact-SQL.doc
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
165 Кб
Скачать
☆

Переменные в Transact-sql

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

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

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

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

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

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

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

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

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

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

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

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

DECLARE @sum int

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

DECLARE @temp int, @count float

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

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

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

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

SET @sum = 0

В версии MS SQL Server 2008 появились следующие нововведения.

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

DECLARE @iCounter int = 0

  • Появились операторы +=, –=, *=, /= для краткой формы записи арифметических конструкций.

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

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

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

BEGIN

...

END

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

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

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

IF <условие>

Оператор

[ELSE

Оператор ]

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

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

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

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

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

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

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

[...]

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

END

Пример:

SELECT TOP 10 SalesOrderID, SalesOrderID % 10 AS ‘Last Digit’, Position = CASE SalesOrderID % 10

WHEN 1 THEN ‘Один’

WHEN 2 THEN ‘Два’

WHEN 3 THEN ‘Три’

WHEN 4 THEN ‘Четыре’

ELSE ‘Другое’

END

FROM Sales.SalesOrderHeader;

Результат запроса представлен на рис. 3.1.

Рис. 3.1. Результат использования оператора CASE

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

CASE

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

[...]

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

END

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

Пример:

SELECT TOP 10 SalesOrderID % 10 AS 'OrderLastDigit',

ProductID % 10 AS 'ProductLastDigit',

"How Close?" = CASE

WHEN (SalesOrderID % 10) < 3 THEN 'Меньше трёх'

WHEN ProductID = 6 THEN 'ProductID равен 6'

WHEN ABS(SalesOrderID % 10 - ProductID) <= 1 THEN ' В пределах одного'

ELSE 'Больше одного'

END

FROM Sales.SalesOrderDetail

ORDER BY SalesOrderID DESC;

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

Рис. 3.2. Результат использования оператора CASE