2.1. Обозначения
Язык Transact-SQL является центральным моментом использования SQL Server. Все приложения, взаимодействующие с SQL Server, отправляют серверу инструкции Transact-SQL независимо от пользовательского интерфейса приложения.
Для однозначного понимания синтаксиса языка приведена табл. 1 (из справочника по Transact-SQL), в которой перечислены и описаны используемые соглашения:
Таблица 1
Соглашение Используется для
ВЕРХНИЙ РЕГИСТР Ключевые слова Transact-SQL.
курсив Пользовательские параметры синтаксиса Transact-SQL.
полужирный Имена баз данных, таблиц, столбцов, индексов, хранимых процедур, программ, типов данных и текст должны вводиться в точном соответствии с примером.
подчеркнутый Указывает значение по умолчанию, которое применяется, когда в инструкции пропущено предложение, содержащее подчеркнутое значение.
| (вертикальная черта) Разделяет элементы синтаксиса внутри квадратных или фигурных скобок. Может быть выбран только один из элементов.
[ ] (квадратные скобки) Необязательные элементы синтаксиса. Скобки вводить не следует.
{ } (фигурные скобки) Обязательные элементы синтаксиса. Скобки вводить не следует.
[,...n] Указывает на то, что предшествующий элемент можно повторить n раз. Отдельные вхождения элемента разделяются запятыми.
[...n] Указывает на то, что предшествующий элемент можно повторить n раз. Отдельные вхождения элемента разделяются пробелами.
<метка> Имя синтаксического блока. Данное соглашение используется для группирования и маркировки длинных частей синтаксиса или синтаксического блока, который может использоваться в нескольких местах в рамках одной инструкции.
Основные правила написания кодов на Transact-SQL Вы рассматривали ранее, поэтому стоит напомнить лишь, что рекомендуется использовать точку с запятой (;) как признак конца инструкции Transact-SQL, хотя это не является обязательным.
2.2. Локальные переменные
Любой объект базы данных должен обладать уникальным именем внутри это базы. На основе использования и происходит обращение к этому объекту. Имена объектов называются идентификаторами. Transact-SQL накладывает ряд ограничений на порядок именования объектов:
• первый символ имени должен быть одним из символов латинского алфавита (A-Z, a-z), либо символом @, # или _, т.е. не допускается использование цифр и прочих специальных символов;
• остальная часть имени может включать любые символы алфавита, цифры и некоторые специальные символы, а общая длина имени объекта не должна превышать 128 символов;
• внутри имени запрещается использование пробелов, скобок и таких символов, как ~, !, %, ^, & и др.
• имя объекта не должно совпадать с зарезервированным словом и с именем уже существующего объекта.
Имена локальных переменных должны удовлетворять перечисленным правилам именования объектов и всегда должны начинаться с символа @. Область действия переменной ограничена пакетом операторов или процедурой, в которой она была объявлена.
Объявление переменной
DECLARE @ИмяПеременной ТипДанных [ ,…n]
Основные типы данных
character(n) (char (n)) – строка, где n - длина строки. Значения вводятся в апострофах;
varchar (n) – строка переменной длины, где n – максимально возможная ее длина. Значения вводятся в апострофах;
integer (int) – целое число со знаком размером 4 байта;
smallint – короткое целое число со знаком размером 2 байта;
decimal (n,m) – вещественное число, где n – общая длина числа, m – количество знаков справа от десятичной точки;
bit (n) – двоичная строка, где n – длина строки в байтах;
datetime – дата и время;
money – денежный.
Присвоение значения
SET @ИмяПеременной = Выражение
2.3. Управляющие конструкции Transact-SQL
Объединение двух и более команд в единый блок осуществляется с помощью конструкции:
BEGIN
…
END
Такая группировка используется в условных и циклических конструкциях.
Конструкция ветвления
Выполнение той или иной группы команд в зависимости от выполнения или не выполнения некоторого условия реализуется с помощью конструкции:
IF условие
Оператор
[ ELSE
Оператор ]
При отсутствии команд, выполняемых при не соблюдении условия, ключевое слово ELSE можно не указывать.
Циклическая конструкция
Transact-SQL поддерживает цикл WHILE, синтаксис которого следующий:
WHILE Условие
Оператор
[ BREAK | CONTINUE ]
Тело цикла выполняется до тех пор, пока условие истинно. Цикл можно принудительно остановить, если выполнить в теле цикла команду BREAK. Если же нужно начать цикл заново, не дожидаясь выполнения команд тела цикла, необходимо выполнить команду CONTINUE.
Вывод данных
Print выражение или значение
Комментарии
Существует два вида комментариев:
• однострочные – в этом случае игнорируется текст справа от символов комментария: --;
• многострочные – игнорируется текст между двумя парами символов: /*…*/.
2.4. Функции Transact-SQL
SQL-Server имеет ряд встроенных функций для облегчения и ускорения обработки данных. Различают три типа функций:
• функции наборов записей – результатом выполнения является объект, который может быть использован как таблица данных;
• агрегатные функций – результатом является единственное значение из некоторого сгруппированного набора значений;
• скалярные функций – результатом является одно единственное значение из строго определенного набора аргументов.
Скалярные функции
Выделяют следующие категории скалярных функций:
1) Математические функции
Большинство математических функций возвращают результат того же типа, что и исходные значения. Например, при переводе величины угла из градусов в радианы в случае Radians(90) результат равен 1, что неверно. Правильная запись Radians (90.0).
Abs (выражение) – вычисление абсолютного значения выражения. Можно использовать как целочисленные, так и нецелочисленные величины.
IsNumeric (выражение) – проверка имеет ли указанное выражение числовой тип данных. Результат равен 1, если выражение имеет числовой тип, иначе – 0.
Rand () – возвращает случайное значение на основе системного времени в диапазоне от 0 до 1.
Floor (выражение) – округление указанного значения до ближайшего минимального целого числа.
Ceiling (выражение) – возвращает ближайшее целое число, большее или равное данному.
Power (выражение, степень) – возведение в степень выражения. Тип возвращаемого значения совпадает с исходным типом.
Sqrt (выражение) – вычисляет квадратный корень.
2) Строковые функции
Ascii (строка) – возвращает ASCII-код самого левого символа строки.
Char (выражение) – возвращает символ, ASCII-код которого соответствует указанному выражению.
Len (строка) – вычисляет длину строки в символах.
LTrim (строка), RTrim (строка) – удаляет начальные и концевые пробелы соответственно.
Left (строка, число), Right (строка, число) – возвращает указанное количество символов строки, начиная с левого и правого края строки соответственно.
SubString (строка, начало, длина) – возвращает для строки подстроку указанной длины, начиная с указанного символа.
CharIndex (строка1, строка2 [, старт]) – поиск подстроки строка1 в строке строка2. Возвращает порядковый номер первого символа, с которого начинается первое вхождение подстроки в строку. Дополнительно можно указать стартовую позицию, с которой будет начат поиск.
Stuff (строка1, начало, длина, строка2) – удаляет определенное количество символов строки, начиная с указанного, и заменяет их новой подстрокой.
Replace (строка1, строка2, строка3) – заменяет все вхождения строки строка2 в исходной строке строка1 на строка3.
Reverse (строка) – возвращает строку, символы которой записаны в обратном порядке по отношению к исходной строке.
3) Функции для работы с датами
GetDate () – возвращает текущее системное время.
IsDate (выражение) – проверяет правильность выражения на соответствие одному из возможных форматов ввода даты.
Day (дата), Month(дата), Year(дата) – возвращают день, месяц и год из указанной даты.
DateName (тип, дата) – выделяет из даты указанную в типе часть и возвращает ее в символьном формате. Формат частей: yy или yyyy – год, qq или q – квартал, mm или m – месяц, dd или d – день, wk или ww – неделя, hh – час, mi или m – минута, ss или s – секунда, ms – миллисекунда.
DatePart (тип, дата) – выделяет из даты указанную часть и возвращает ее в числовом формате.
DateAdd (тип, число, дата) – добавляет к указанной дате число, тип которого указан в первом параметре.
DateDiff (тип, начало, окончание) – возвращает разницу между указанными частями дат в указанном типе.
Функция для конвертирования значений одного типа в значения другого типа
Convert (тип, выражение [, стиль])
Выражение определяет величину, которую необходимо конвертировать, аргумент тип указывает тип, в который необходимо конвертировать данные. При конвертировании в символьный тип чисел и дат можно указывать аргумент стиль, который позволяет управлять стилем представления. Например, результатом выражения выполнения функции Convert (char(10), GetDate(), 102) является строка из 10 символов содержащая текущую дату в формате yyyy.mm.dd.
Конфигурационные функции
Возвращают информацию о текущей конфигурации SQL Server. Например:
@@Version – возвращает информацию о дате, версии и типе процессора сервера.
@@ServerName – символьное имя локального SQL Server.
@@Max_Connections – максимально разрешенное количество одновременных подключений к серверу.
Системные функции
Возвращают информацию о значениях, объектах и текущих параметрах SQL Server.
DataLength(выражение) – возвращает число, соответствующее количеству байт, необходимых для хранения результата выражения.
@@Error – код последней ошибки, произошедшей в текущем соединении. Если ошибок нет, результат 0.
Host_Name() – символьное имя компьютера в сети, на котором выполняется команда.
System_User и Session_User – возвращают соответственно имя учетной записи пользователя для входа и имя пользователя текущей базы данных.
@@IDLE – определяет количество тактов, прошедшее со времени последнего запуска SQL Server. Один такт совершается за 31,25 миллисекунды.
NewID() – генерирует новое значение типа uniqueidentifier (счетчик, идентификатор).
2.5. Работа с Transact-SQL в MS SQL Server 2005
SQL Server Management Studio предоставляет возможности для создания, редактирования и сохранения SQL-запросов. Чтобы открыть окно для записи запросов на языке Transact-SQL – пункт Создать запрос. Откроется новое окно и появится специальная панель инструментов, на которой имеются кнопки для запуска, синтаксического анализа и остановки запроса (рис. 1). Можно открыть несколько окон, закрыть их, сохраняя или не сохраняя изменения (например, через главное меню или контекстное меню ярлычка окна).
Задачи
1. С помощью команды SELECT @@version определите информацию об используемой версии SQL Server.
2. Написать программу пересчета веса из фунтов в килограммы (1 фунт равняется 409,5 г.). Результат должен быть выведен следующим образом, например: 3,3 фунт(а/ов) – это 1 кг 351 г.
3. Определить количество часов и минут, прошедших со времени запуска служб SQL-Server.
4. Определить является ли текущий год високосным. (Знак % вычисляет остаток от деления)
5. Найти сумму цифр в заданной строке символов.
Order Penny Boss phone cards from United States