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