Transact-SQL
Transact-SQL (T-SQL) — процедурне розширення мови SQL, створене компанією Microsoft (для Microsoft SQL Server) і Sybase (для Sybase ASE).
SQL був розширений наступними додатковими можливостями, такими як:
- Керуючі оператори,
- Локальні і глобальні змінні,
- Різні додаткові функції для обробки рядків, дат, математики, тощо,
- Підтримка аутентифікації Microsoft Windows.
Мова Transact-SQL є ключем до використання MS SQL Server. Всі застосунки, які взаємодіють з екземпляром MS SQL Server, незалежно від їхньої реалізації і інтерфейсу користувача, відправляють з сервера інструкції Transact-SQL.
Елементи синтаксису
Директиви сценарію
Директиви сценарію — це специфічні команди, які використовуються тільки в MS SQL. Ці команди допомагають серверу визначати правила роботи зі скриптом і транзакціями. Типові представники: GO — інформує програми SQL Server про закінчення пакета інструкцій Transact-SQL, EXEC (або EXECUTE) — виконує процедуру або скалярну функцію.
Коментарі
Коментарі використовуються для створення пояснень для блоків сценаріїв, а також для тимчасового відключення команд при налагодженні скрипту. Коментарі бувають як строковими так і блоковими:
--
— рядковий коментар виключає з виконання тільки один рядок, перед яким стоять два мінуси./* */
— блоковий коментар виключає з виконання цілий блок команд, укладений в зазначену конструкцію. Допускає вкладені коментарі.
Типи даних
Як і в мовах програмування, в SQL існують різні типи даних для зберігання змінних:
- Числа — для зберігання числових змінних (bit, int, tinyint, smallint, bigint, numeric, decimal, money, smallmoney, float, real).
- Дати — для зберігання дати та часу (datetime, smalldatetime, date, time, datetime2, datetimeoffset).
- Символи — для зберігання символьних даних (char, nchar, varchar, nvarchar).
- Двійкові — для зберігання бінарних даних (binary, varbinary).
- Більш об'ємні — типи даних для зберігання великих бінарних даних (text, ntext, image).
- Спеціальні — покажчики (cursor), 16-байтове шістнадцяткове число, яке використовується для GUID (uniqueidentifier), штамп зміни рядка (timestamp), версія рядки (rowversion), таблиці (table).
Примітка. Для використання російських символів (НЕ ASCII кодування) використовуються типи даних з приставкою «n» (nchar, nvarchar, ntext), які кодують символи двома байтами. Інакше кажучи, для роботи з Unicode використовуються типи даних з «n» (від слова national). Строкові константи з Unicode також записуються з «n» на початку.
Примітка. Для даних змінної довжини використовуються типи даних з приставкою «var». Типи даних без приставки «var» мають фіксовану довжину області пам'яті, невикористана частина якої заповнюється пробілами або нулями.
Ідентифікатори
Ідентифікатори — це спеціальні символи, які використовуються зі змінними для ідентифікування їх типу або для угруповання слів в змінну. Типи ідентифікаторів:
- @ — ідентифікатор локальної змінної (користувальницької).
- @@ — ідентифікатор глобальної змінної (вбудованої).
- # — ідентифікатор локальної таблиці або процедури.
- ## — ідентифікатор глобальної таблиці або процедури.
- [] — ідентифікатор угруповання слів в змінну (працюють як стандартні "").
Змінні
Змінні використовуються в сценаріях і для зберігання тимчасових даних. Щоб працювати зі змінною, її потрібно оголосити, при тому оголошення повинно бути здійснено в тій транзакції і пакеті інструкцій, в якій виконується команда, яка використовує цю змінну. Інакше кажучи, після завершення транзакції, а також після команди GO, змінна знищується.
Оператори
Оператори — це спеціальні команди, призначені для виконання простих операцій над змінними:
- Арифметичні оператори: «*» — помножити, «/» — ділити, «%» — залишок від ділення, «+» — скласти, «-» — відняти, «()» — дужки.
- Оператори порівняння: "=" — одно, «>» — більше, «<» — менше, ">=" — більше або дорівнює, "<=" менше або дорівнює, «<>» ("! =") — не одно, between (замість ">=", "<=").
- Оператори з'єднання: «+» — з'єднання (конкатенація) рядків.
- Логічні оператори: «AND» — і, «OR» — або, «NOT» — ні.
- Оператори з множинами: «IN».
Системні функції
- Специфікація Transact-SQL значно розширює стандартні можливості SQL завдяки вбудованим функціям:
- Агрегатні функції — функції, які працюють з колекціями значень і видають одне значення. Типові представники: AVG — середнє значення колонки, SUM — сума колонки, MAX — максимальне значення колонки, COUNT — кількість елементів колонки.
- Скалярні функції — це функції, які повертають одне значення, працюючи зі скалярними даними або взагалі без вхідних даних. Типові представники: DATEDIFF — різниця між датами, ABS — модуль числа, DB_NAME — ім'я бази даних, USER_NAME — ім'я поточного користувача, LEFT — частина рядка зліва.
- Функції-покажчики — функції, які використовуються як посилання на інші дані. Типові представники: OPENXML — покажчик на джерело даних у вигляді XML-структури, OPENQUERY — покажчик на джерело даних у вигляді іншого запиту.
Примітка. Повний список функцій можна знайти в довідці до SQL сервера.
Примітка. До скалярним функцій можна також віднести і глобальні змінні, які в тексті сценарію викликаються подвійним равликом «@@».
Вирази
Вираз — це комбінація символів і операторів, яка отримує на вхід скалярну величину, а на виході дає іншу величину або виконує якусь дію. У Transact-SQL вирази поділяються на 3 типи: DDL, DCL і DML.
- DDL (Data Definition Language) — використовуються для створення об'єктів в базі даних. Основні представники даного класу: CREATE — створення об'єктів, ALTER — зміна об'єктів, DROP — видалення об'єктів.
- DCL (Data Control Language) — використовуються для призначення прав на об'єкти бази даних. Основні представники даного класу: GRANT — дозвіл на об'єкт, DENY — заборона на об'єкт, REVOKE — скасування дозволів і заборон на об'єкт.
- DML (Data Manipulation Language) — використовуються для запитів і зміни даних. Основні представники даного класу: SELECT — вибірка даних, INSERT — вставка даних, UPDATE — зміна даних, DELETE — видалення даних.
Управління виконанням сценарію
У Transact-SQL існують спеціальні команди, які дозволяють керувати потоком виконання сценарію, перериваючи його або направляючи в потрібну гілку.
- Блок угруповання — структура, яка об'єднує список виразів в один логічний блок (BEGIN … END).
- Блок умови — структура, яка перевіряє виконання певного умови (IF … ELSE).
- Блок циклу — структура, що організує повторення виконання логічного блоку (WHILE … BREAK … CONTINUE).
- Перехід — команда, яка виконує перехід потоку виконання сценарію на вказану мітку (GOTO).
- Очікування — команда, що затримує виконання сценарію (WAITFOR).
- Виклик помилки — команда, яка генерує помилку виконання сценарію (RAISERROR).
Література
- Майк Гандерлой, Джозеф Джорден, Дейвид Чанц. Часть II. Язык программирования Transact-SQL // Освоение Microsoft SQL Server 2005 = Mastering Microsoft SQL Server 2005. — М.: «Диалектика», 2007. — С. 139—280. — ISBN 0-7821-4380-6.
- Роберт Виейра. Глава 3. Основные сведения о языке T-SQL // Программирование баз данных MS SQL Server 2005 для профессионалов = Professional Microsoft SQL Server 2005 Programming. — М.: «Диалектика», 2007. — С. 86-129. — 1072 с. — ISBN 978-5-8459-1329-6.
- Виталий Бочкарёв. Просто о Transact-SQL (рус.) (25 января 2010). Архивировано из первоисточника на WebCite 15 февраля 2012 года.
- Microsoft Corporation. Курс MS-2071 «Создание запросов в Microsoft SQL Server 2000 с использованием Transact-SQL» (англ.) (13 октября 2004). Архивировано из первоисточника на WebCite 15 февраля 2012 года.