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 года.