T-SQL
T-SQL (Transact-SQL) — это процедурное расширение языков SQL (Structured Query Language), разработанное корпорацией Microsoft и Sybase. Оно используется для взаимодействия с системами управления реляционными базами данных (СУБД), включая Microsoft SQL Server и Azure SQL Database. T-SQL добавляет к стандартному SQL возможности написания программного кода: переменные, условные операторы, циклы, обработку ошибок и работу с курсорами.
История
История T-SQL берёт начало в середине 1980-х годов, когда компания Sybase совместно с Microsoft и Ashton-Tate разрабатывала первую версию СУБД, известную как SQL Server. Расширение SQL, названное Transact-SQL, было создано для обеспечения более сложной логики обработки данных, чем позволял стандартный язык запросов. После разделения продуктов в начале 1990-х годов Microsoft продолжила развитие собственной версии SQL Server (начиная с версии 6.0 в 1995 году), сохранив и расширив диалект T-SQL. В 2000-е годы вместе с выходом SQL Server 2000 были добавлены новые возможности, такие как пользовательские функции и поддержка XML. Современные версии (SQL Server 2022 и Azure SQL Database) продолжают развивать T-SQL, включая интеграцию с языком R и Python, поддержку JSON, а также улучшенную обработку больших данных.
Ключевые отличия от стандартного SQL
Хотя T-SQL базируется на стандарте ANSI SQL (ISO/IEC 9075), он содержит ряд уникальных расширений и особенностей:
- Процедурные конструкции: наличие переменных, операторов IF…ELSE, WHILE, BEGIN…END, GOTO и RETURN.
- Обработка ошибок: блок TRY…CATCH, функция ERROR_MESSAGE(), ERROR_NUMBER().
- Работа с временными таблицами: возможность создавать локальные (с префиксом #) и глобальные (##) временные таблицы.
- Табличные типы данных: можно объявлять переменные типа TABLE.
- Системные функции и хранимые процедуры: богатый набор встроенных функций, таких как GETDATE(), DATEPART(), NULLIF(), COALESCE(), а также системные хранимые процедуры (sp_help, sp_who).
- Поддержка полей с автоинкрементом: свойство IDENTITY для столбцов.
- Работа с курсорами: явное объявление, открытие и поэтапная обработка строк из результирующего набора.
- Оператор MERGE: выполняет операции INSERT, UPDATE или DELETE на основе результатов соединения с исходными данными.
Структура и основные компоненты
Язык определения данных (DDL)
T-SQL позволяет создавать, изменять и удалять объекты базы данных, такие как таблицы, представления, хранимые процедуры, функции, индексы и триггеры. Основные команды DDL в T‑SQL:
CREATE TABLE— создаёт новую таблицу.ALTER TABLE— изменяет структуру существующей таблицы.DROP TABLE— удаляет таблицу.CREATE INDEX— создаёт индекс для ускорения поиска.CREATE VIEW— создаёт представление (виртуальную таблицу).
Пример создания таблицы:
``sql CREATE TABLE Employees ( EmployeeID INT IDENTITY(1,1) PRIMARY KEY, FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, HireDate DATETIME DEFAULT GETDATE() ); ``
Язык манипуляции данными (DML)
Команды DML используются для выборки, вставки, обновления и удаления данных:
SELECT— выбирает данные из одной или нескольких таблиц.INSERT INTO— добавляет новые строки.UPDATE— изменяет существующие данные.DELETE— удаляет строки.
Пример запроса с фильтрацией и сортировкой:
``sql SELECT FirstName, LastName, HireDate FROM Employees WHERE HireDate > '2023-01-01' ORDER BY LastName ASC; ``
Язык управления данными (DCL)
Команды DCL управляют правами доступа к объектам базы данных:
GRANT— предоставляет разрешения.DENY— явно запрещает.REVOKE— отзывает ранее предоставленные или запрещённые разрешения.
Процедурные расширения
Переменные
Переменные в T-SQL объявляются с помощью ключевого слова DECLARE и могут быть любого допустимого типа данных (INT, VARCHAR, DATETIME и др.). Значения присваиваются через SET или при выборке данных.
``sql DECLARE @TotalSales DECIMAL(10,2); SET @TotalSales = (SELECT SUM(Amount) FROM Sales); ``
Условные операторы и циклы
Условный оператор IF…ELSE позволяет выполнить различные блоки кода в зависимости от условия. Для повторяющихся действий используется цикл WHILE.
``sql IF @TotalSales > 1000 PRINT 'Продажи выше среднего'; ELSE PRINT 'Продажи ниже среднего'; ``
``sql WHILE @Counter <= 10 BEGIN PRINT @Counter; SET @Counter = @Counter + 1; END; ``
Обработка ошибок
Блок TRY…CATCH отлавливает ошибки выполнения. В блоке CATCH доступны функции для получения информации об ошибке.
``sql BEGIN TRY INSERT INTO Employees (FirstName, LastName) VALUES (NULL, 'Иванов'); END TRY BEGIN CATCH PRINT 'Ошибка: ' + ERROR_MESSAGE(); END CATCH; ``
Хранимые процедуры и функции
Хранимые процедуры — это именованные блоки T-SQL-кода, которые могут принимать параметры и возвращать наборы данных или коды состояния. Пользовательские функции (скалярные или табличные) возвращают значение или таблицу.
``sql CREATE PROCEDURE GetEmployeeByID @EmployeeID INT AS BEGIN SELECT * FROM Employees WHERE EmployeeID = @EmployeeID; END; ``
Триггеры
Триггер — это особая разновидность хранимой процедуры, которая автоматически выполняется при наступлении определённого события DML (INSERT, UPDATE, DELETE) или DDL (например, CREATE TABLE). Триггеры могут быть для каждой строки (FOR EACH ROW) или для каждого оператора (в SQL Server — только для оператора).
Типы данных
T‑SQL поддерживает широкий спектр типов данных:
- Точные числовые: INT, BIGINT, SMALLINT, TINYINT, DECIMAL/NUMERIC, MONEY, SMALLMONEY.
- Приблизительные числовые: FLOAT, REAL.
- Строковые: CHAR (фиксированная длина), VARCHAR (переменная длина), NCHAR/NVARCHAR (Unicode), TEXT (устаревший).
- Дата и время: DATE, TIME, DATETIME, DATETIME2, SMALLDATETIME, DATETIMEOFFSET.
- Бинарные: BINARY, VARBINARY, IMAGE (устаревший).
- Специальные: UNIQUEIDENTIFIER (GUID), XML, HIERARCHYID, GEOMETRY, GEOGRAPHY.
Использование в Microsoft SQL Server
T‑SQL является основным языком для всех версий Microsoft SQL Server, начиная с 6.0. Помимо управления данными, в среде SQL Server T‑SQL используется для администрирования (создание и настройка базы данных, управление пользователями, резервное копирование) и построения отчётов (совместно с Reporting Services). Современные версии SQL Server также поддерживают выполнение скриптов R и Python, но T‑SQL остаётся главным средством программирования на стороне сервера.
T‑SQL в Azure SQL Database
В облачном сервисе Microsoft Azure SQL Database T‑SQL является основным языком запросов и управления. Большая часть синтаксиса совпадает с локальной версией SQL Server, однако некоторые функции (например, полнотекстовый поиск, Service Broker) могут быть недоступны или иметь ограничения. Azure также предоставляет дополнительные возможности, такие как автоматическое масштабирование и высокая доступность, но работа с данными полностью строится на T‑SQL.
Критика и ограничения
Несмотря на широкую распространённость, T‑SQL подвергается критике за некоторые недостатки:
- Зависимость от платформы: код на T‑SQL не переносим на другие СУБД (Oracle, PostgreSQL, MySQL) без существенной переработки.
- Устаревшие конструкции: некоторые синтаксические элементы и типы данных (например,
TEXT,IMAGE) считаются устаревшими, однако поддерживаются для обратной совместимости. - Отсутствие некоторых современных конструкций: например, встроенной поддержки работы с графами (до SQL Server 2017) и JSON (до версии 2016) не было. Хотя эти возможности постепенно добавляются, реализация часто уступает специализированным решениям.
- Средства отладки: отладка хранимых процедур и функций может быть менее удобной по сравнению с современными языками общего назначения (C#, Python).
Влияние на другие технологии
T-SQL оказал влияние на разработку нескольких других диалектов SQL, включая язык, используемый в Azure Synapse Analytics и некоторых версиях Sybase ASE. Кроме того, Microsoft интегрировала T-SQL в Powеr BI (через DirectQuery и языковой запрос) для эффективной работы с данными.
Источники
- Microsoft Learn — Transact-SQL Reference (SQL Server)
- Microsoft Learn — Getting Started with T-SQL
- Книга: «Transact-SQL. Подробное руководство» (И. Шелт, К. Платт и др.)
- Документация по Microsoft SQL Server (MSDN)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →