<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=Transact-SQL</id>
	<title>Transact-SQL - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=Transact-SQL"/>
	<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=Transact-SQL&amp;action=history"/>
	<updated>2026-05-06T17:38:17Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.dzmuh.com/index.php?title=Transact-SQL&amp;diff=12758&amp;oldid=prev</id>
		<title>Dzmuh: Новая страница: «'''Transact-SQL''' ('''T-SQL''') — процедурное расширение языка SQL, созданное компанией Microsoft (для Microsoft SQL Server) и Sybase (для Sybase ASE).  SQL был расширен такими дополнительными возможностями как: * управляющие операторы, * локальные и глобальные переменные, * различ...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=Transact-SQL&amp;diff=12758&amp;oldid=prev"/>
		<updated>2023-05-07T13:03:10Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&amp;#039;&amp;#039;&amp;#039;Transact-SQL&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;T-SQL&amp;#039;&amp;#039;&amp;#039;) — процедурное расширение языка &lt;a href=&quot;/index.php?title=SQL&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;SQL (страница не существует)&quot;&gt;SQL&lt;/a&gt;, созданное компанией &lt;a href=&quot;/index.php/Microsoft&quot; title=&quot;Microsoft&quot;&gt;Microsoft&lt;/a&gt; (для &lt;a href=&quot;/index.php?title=Microsoft_SQL_Server&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Microsoft SQL Server (страница не существует)&quot;&gt;Microsoft SQL Server&lt;/a&gt;) и &lt;a href=&quot;/index.php?title=Sybase&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Sybase (страница не существует)&quot;&gt;Sybase&lt;/a&gt; (для &lt;a href=&quot;/index.php?title=Sybase_ASE&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Sybase ASE (страница не существует)&quot;&gt;Sybase ASE&lt;/a&gt;).  SQL был расширен такими дополнительными возможностями как: * управляющие операторы, * локальные и глобальные переменные, * различ...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Transact-SQL''' ('''T-SQL''') — процедурное расширение языка [[SQL]], созданное компанией [[Microsoft]] (для [[Microsoft SQL Server]]) и [[Sybase]] (для [[Sybase ASE]]).&lt;br /&gt;
&lt;br /&gt;
SQL был расширен такими дополнительными возможностями как:&lt;br /&gt;
* управляющие операторы,&lt;br /&gt;
* локальные и глобальные переменные,&lt;br /&gt;
* различные дополнительные функции для обработки строк, дат, математики и т. п.,&lt;br /&gt;
* поддержка аутентификации Microsoft Windows.&lt;br /&gt;
&lt;br /&gt;
Язык Transact-SQL является ключом к использованию MS SQL Server. Все приложения, взаимодействующие с экземпляром MS SQL Server, независимо от их реализации и пользовательского интерфейса, отправляют серверу инструкции Transact-SQL.&lt;br /&gt;
&lt;br /&gt;
== Элементы синтаксиса ==&lt;br /&gt;
&lt;br /&gt;
=== Директивы сценария ===&lt;br /&gt;
Директивы сценария — это специфические команды, которые используются только в MS SQL. Эти команды помогают серверу определять правила работы со скриптом и транзакциями. Типичные представители: GO — информирует SQL Server об окончании пакета инструкций Transact-SQL, EXEC (или EXECUTE) — выполняет процедуру или скалярную функцию.&lt;br /&gt;
&lt;br /&gt;
=== Комментарии ===&lt;br /&gt;
Комментарии используются для создания пояснений для блоков сценариев, а также для временного отключения команд при отладке скрипта. Комментарии бывают как строковыми, так и блоковыми:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; — строковый комментарий исключает из выполнения только одну строку, перед которой стоят два минуса.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/* */&amp;lt;/code&amp;gt; — блоковый комментарий исключает из выполнения целый блок команд, заключённый в указанную конструкцию. Допускает вложенные комментарии.&lt;br /&gt;
&lt;br /&gt;
=== Типы данных ===&lt;br /&gt;
Как и в языках программирования, в SQL существуют различные типы данных для переменных:&lt;br /&gt;
* Числа — для хранения числовых переменных (bit, int, tinyint, smallint, bigint, numeric, decimal, money, smallmoney, float, real).&lt;br /&gt;
* Даты — для хранения даты и времени (datetime, smalldatetime, date, time, datetime2, datetimeoffset).&lt;br /&gt;
* Символы — для хранения символьных данных (char, nchar, varchar, nvarchar).&lt;br /&gt;
* Двоичные — для хранения бинарных данных (binary, varbinary, image&amp;lt;ref&amp;gt;{{cite web|url=https://info-comp.ru/programmirovanie/605-data-types-in-t-sql.html|title=Типы данных в T-SQL|author=|website=|date=|publisher=info-comp.ru|lang=ru|accessdate=2018-10-12|archive-date=2018-10-13|archive-url=https://web.archive.org/web/20181013053803/https://info-comp.ru/programmirovanie/605-data-types-in-t-sql.html|deadlink=no}}&amp;lt;/ref&amp;gt;).&lt;br /&gt;
* Большеобъемные — типы данных для хранения больших бинарных данных (text, ntext, image).&lt;br /&gt;
* Специальные — указатели (cursor), 16-байтовое шестнадцатеричное число, которое используется для GUID (uniqueidentifier), штамп изменения строки (timestamp), версия строки (rowversion), таблицы (table).&lt;br /&gt;
&lt;br /&gt;
''Примечание. Для использования русских символов (не ASCII кодировки) используются типы данных с приставкой «n» (nchar, nvarchar, ntext), которые кодируют символы двумя байтами. Иначе говоря, для работы с Unicode используются типы данных с «n» (от слова national). Строковые константы с ''Unicode'' также записываются с «n» в начале.''&lt;br /&gt;
&lt;br /&gt;
''Примечание. Для данных переменной длины используются типы данных с приставкой «var». Типы данных без приставки «var» имеют фиксированную длину области памяти, неиспользованная часть которой заполняется пробелами или нулями.''&lt;br /&gt;
&lt;br /&gt;
=== Идентификаторы ===&lt;br /&gt;
Идентификаторы — это специальные символы, которые используются с переменными для идентифицирования их типа или для группировки слов в переменную. Типы идентификаторов:&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;@&amp;lt;/nowiki&amp;gt; — идентификатор локальной переменной (пользовательской).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;@@&amp;lt;/nowiki&amp;gt; — идентификатор глобальной переменной (встроенной).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; — идентификатор локальной таблицы или процедуры.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; — идентификатор глобальной таблицы или процедуры.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;[ ]&amp;lt;/nowiki&amp;gt; — идентификатор группировки слов в переменную (работают как стандартные &amp;quot; &amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Переменные ===&lt;br /&gt;
Переменные используются в сценариях. Чтобы работать с переменной, её нужно объявить, при том объявление должно быть осуществлено в той транзакции или пакете инструкций, в которой выполняется команда, использующая эту переменную. Иначе говоря, после завершения транзакции, а также после команды GO, переменная уничтожается.&lt;br /&gt;
&lt;br /&gt;
Объявление переменной выполняется командой DECLARE, задание значения переменной осуществляется либо командой SET, либо SELECT:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;tsql&amp;quot;&amp;gt;&lt;br /&gt;
USE TestDatabase&lt;br /&gt;
-- Объявление переменных&lt;br /&gt;
DECLARE @EmpID int, @EmpName varchar(40)&lt;br /&gt;
-- Задание значения переменной @EmpID&lt;br /&gt;
SET @EmpID = 1&lt;br /&gt;
-- Задание значения переменной @EmpName&lt;br /&gt;
SELECT @EmpName = UserName FROM Users WHERE UserID = @EmpID&lt;br /&gt;
-- Вывод переменной @EmpName в результат запроса&lt;br /&gt;
SELECT @EmpName AS [Employee Name]&lt;br /&gt;
GO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''Примечание. В этом примере используется группировка слов в лексему — конструкция [Employee Name] воспринимается как одна лексема, так как слова заключены в квадратные скобки.''&lt;br /&gt;
&lt;br /&gt;
=== Операторы ===&lt;br /&gt;
Операторы — это специальные команды, предназначенные для выполнения простых операций над переменными:&lt;br /&gt;
* Арифметические операторы: «*» — умножить, «/» — делить, «%» — остаток от деления, «+» — сложить, «-» — вычесть, «()» — скобки.&lt;br /&gt;
* Операторы сравнения: «=» — равно, «&amp;gt;» — больше, «&amp;lt;» — меньше, «&amp;gt;=» — больше или равно, «&amp;lt;=» - меньше или равно, «&amp;lt;&amp;gt;» («!=») — не равно, between (вместо «&amp;gt;=», «&amp;lt;=»).&lt;br /&gt;
* Операторы соединения: «+» — соединение (конкатенация) строк.&lt;br /&gt;
* Логические операторы: «AND» — и, «OR» — или, «NOT» — не.&lt;br /&gt;
* Операторы со множествами: «IN».&lt;br /&gt;
&lt;br /&gt;
=== Системные функции ===&lt;br /&gt;
Спецификация Transact-SQL значительно расширяет стандартные возможности SQL благодаря встроенным функциям:&lt;br /&gt;
* Агрегативные функции — функции, которые работают с коллекциями значений и выдают одно значение. Типичные представители: AVG — среднее значение колонки, SUM — сумма колонки, MAX — максимальное значение колонки, MIN — минимальное значение колонки, COUNT — количество элементов колонки.&lt;br /&gt;
* Скалярные функции — это функции, которые возвращают одно значение, работая со скалярными данными или вообще без входных данных. Типичные представители: DATEDIFF — разница между датами, ABS — модуль числа, DB_NAME — имя базы данных, USER_NAME — имя текущего пользователя, LEFT — часть строки слева.&lt;br /&gt;
* Функции-указатели — функции, которые используются как ссылки на другие данные. Типичные представители: OPENXML — указатель на источник данных в виде XML-структуры, OPENQUERY — указатель на источник данных в виде другого запроса.&lt;br /&gt;
&lt;br /&gt;
''Примечание. Полный список функций можно найти в справке к SQL серверу.''&lt;br /&gt;
&lt;br /&gt;
''Примечание. К скалярным функциям можно также отнести и глобальные переменные, которые в тексте сценария вызываются двойной собакой «@@».''&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;tsql&amp;quot;&amp;gt;&lt;br /&gt;
USE TestDatabase&lt;br /&gt;
-- Использование агрегативной функции для подсчета средней зарплаты&lt;br /&gt;
SELECT AVG(BaseSalary) AS [Average salary] FROM Positions&lt;br /&gt;
GO&lt;br /&gt;
-- Использование скалярной функции для получения имени базы данных&lt;br /&gt;
SELECT DB_NAME() AS [Database name]&lt;br /&gt;
GO&lt;br /&gt;
-- Использование скалярной функции для получения имени текущего пользователя&lt;br /&gt;
DECLARE @MyUser char(30)&lt;br /&gt;
SET @MyUser = USER_NAME()&lt;br /&gt;
SELECT 'The current user''s database username is: '+ @MyUser&lt;br /&gt;
GO&lt;br /&gt;
-- Использование функции-указателя для получения данных с другого сервера&lt;br /&gt;
SELECT * FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM owner.titles')&lt;br /&gt;
GO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выражения ===&lt;br /&gt;
Выражение — это комбинация операторов и символов, которая получает на вход скалярную величину, а на выходе дает другую величину или исполняет какое-то действие. В Transact-SQL выражения делятся на 3 типа: DDL, DCL и DML.&lt;br /&gt;
* DDL (Data Definition Language) — выражения этого типа используются для создания объектов в базе данных. Основные представители данного класса: CREATE — создание объектов, ALTER — изменение объектов, DROP — удаление объектов.&lt;br /&gt;
* DCL (Data Control Language) — выражения этого типа предназначены для назначения прав на объекты базы данных. Основные представители данного класса: GRANT — разрешение на объект, DENY — запрет на объект, REVOKE — отмена разрешений и запретов на объект.&lt;br /&gt;
* DML (Data Manipulation Language) — выражения этого типа используются для запросов и изменения данных. Основные представители данного класса: SELECT — выборка данных, INSERT — вставка данных, UPDATE — изменение данных, DELETE — удаление данных.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;tsql&amp;quot;&amp;gt;&lt;br /&gt;
USE TestDatabase&lt;br /&gt;
-- Использование DDL&lt;br /&gt;
CREATE TABLE TempUsers (UserID int, UserName nvarchar(40), DepartmentID int)&lt;br /&gt;
GO&lt;br /&gt;
-- Использование DCL&lt;br /&gt;
GRANT SELECT ON Users TO public&lt;br /&gt;
GO&lt;br /&gt;
-- Использование DML&lt;br /&gt;
SELECT UserID, UserName + ' ' + UserSurname AS [User Full Name] FROM Users&lt;br /&gt;
GO&lt;br /&gt;
-- Использование DDL&lt;br /&gt;
DROP TABLE TempUsers&lt;br /&gt;
GO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Управление выполнением сценария ===&lt;br /&gt;
В Transact-SQL существуют специальные команды, которые позволяют управлять потоком выполнения сценария, прерывая его или направляя в нужную ветвь.&lt;br /&gt;
* Блок группировки — структура, объединяющая список выражений в один логический [[Блок (программирование)|блок]] (BEGIN … END).&lt;br /&gt;
* Блок условия — структура, проверяющая выполнения определённого условия (IF … ELSE).&lt;br /&gt;
* Блок цикла — структура, организующая повторение выполнения логического блока (WHILE … BREAK … CONTINUE).&lt;br /&gt;
* Переход — команда, выполняющая переход потока выполнения сценария на указанную метку (GOTO).&lt;br /&gt;
* Задержка — команда, задерживающая выполнение сценария (WAITFOR).&lt;br /&gt;
* Вызов ошибки — команда, генерирующая ошибку выполнения сценария (RAISERROR).&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[PL/SQL]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* {{книга&lt;br /&gt;
|автор = Майк Гандерлой, Джозеф Джорден, Дейвид Чанц&lt;br /&gt;
|часть = Часть II. Язык программирования Transact-SQL&lt;br /&gt;
|заглавие = Освоение Microsoft SQL Server 2005&lt;br /&gt;
|оригинал = Mastering Microsoft SQL Server 2005&lt;br /&gt;
|ссылка = &lt;br /&gt;
|издание = &lt;br /&gt;
|место =  М.&lt;br /&gt;
|издательство = [[Диалектика (издательство)|«Диалектика»]]&lt;br /&gt;
|год = 2007&lt;br /&gt;
|страницы = 139-280&lt;br /&gt;
|isbn = 0-7821-4380-6&lt;br /&gt;
}}&lt;br /&gt;
* {{книга&lt;br /&gt;
|автор = Роберт Виейра&lt;br /&gt;
|часть = Глава 3. Основные сведения о языке T-SQL&lt;br /&gt;
|заглавие = Программирование баз данных MS SQL Server 2005 для профессионалов&lt;br /&gt;
|оригинал = Professional Microsoft SQL Server 2005 Programming&lt;br /&gt;
|ссылка = &lt;br /&gt;
|издание = &lt;br /&gt;
|место = М.&lt;br /&gt;
|издательство = [[Диалектика (издательство)|«Диалектика»]]&lt;br /&gt;
|год = 2007&lt;br /&gt;
|страницы = 86-129&lt;br /&gt;
|страниц = 1072&lt;br /&gt;
|isbn = 978-5-8459-1329-6&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
{{википедия|Transact-SQL}}&lt;br /&gt;
* {{cite web|author=Виталий Бочкарёв.|title=Просто о Transact-SQL|date=2010-01-25|url=http://www.sysengineering.ru/Administration/TransactSQL.aspx|lang=ru|archiveurl=https://www.webcitation.org/65SFiAlTe?url=http://www.sysengineering.ru/Administration/TransactSQL.aspx|archivedate=2012-02-14}}&lt;br /&gt;
* {{cite web|author=Microsoft Corporation.|title=Курс MS-2071 &amp;quot;Создание запросов в Microsoft SQL Server 2000 с использованием Transact-SQL&amp;quot;|date=2004-10-13|url=http://www.microsoft.com/learning/en/us/course.aspx?ID=2071B|lang=en|archiveurl=https://www.webcitation.org/65SFjK8zd?url=http://www.microsoft.com/learning/en/us/course.aspx?ID=2071B|archivedate=2012-02-14}}&lt;br /&gt;
&lt;br /&gt;
{{Microsoft SQL Server}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Процедурные расширения SQL]]&lt;/div&gt;</summary>
		<author><name>Dzmuh</name></author>
	</entry>
</feed>