Transact-SQL ( T-SQL ) — это собственное расширение SQL (языка структурированных запросов) от Microsoft и Sybase , используемое для взаимодействия с реляционными базами данных . T-SQL расширяет стандарт SQL, включая процедурное программирование , локальные переменные , различные вспомогательные функции для обработки строк, обработки данных, математику и т. д., а также изменения в операторах DELETE и UPDATE .
Transact-SQL занимает центральное место в использовании Microsoft SQL Server . Все приложения, которые взаимодействуют с экземпляром SQL Server, делают это путем отправки инструкций Transact-SQL на сервер, независимо от пользовательского интерфейса приложения.
Хранимые процедуры в SQL Server — это исполняемые процедуры на стороне сервера. Преимущество хранимых процедур — возможность передавать параметры.
Transact-SQL предоставляет следующие инструкции для объявления и установки локальных переменных: DECLARE
, SET
и SELECT
.
ОБЪЯВИТЬ @var1 NVARCHAR ( 30 ); SET @var1 = 'Какое-то имя' ; ВЫБЕРИТЕ @var1 = Имя ИЗ продаж . Магазин ГДЕ CustomerID = 100 ;
Ключевые слова для управления потоком в Transact-SQL включают BEGIN
и END
, BREAK
, CONTINUE
, GOTO
, IF
и ELSE
, RETURN
, WAITFOR
и WHILE
.
IF
и ELSE
разрешить условное выполнение. Этот пакетный оператор выведет «Это выходные», если текущая дата — выходной день, или «Это будний день», если текущая дата — будний день. (Примечание. В этом коде предполагается, что в настройках воскресенье настроено как первый день недели @@DATEFIRST
.)
ЕСЛИ DATEPART ( dw , GETDATE ()) = 7 ИЛИ DATEPART ( dw , GETDATE ()) = 1 ПЕЧАТЬ 'Сейчас выходные.' ; ELSE PRINT «Сегодня будний день». ;
BEGIN
и END
отметьте блок высказываний . Если в приведенном выше примере условное выражение должно управляться более чем одним оператором, мы можем использовать BEGIN
и END
вот так:
IF DATEPART ( dw , GETDATE ()) = 7 ИЛИ DATEPART ( dw , GETDATE ()) = 1 НАЧАТЬ ПЕЧАТЬ 'Сейчас выходные.' ; ПЕЧАТЬ «Отдохни на выходных!» ; КОНЕЦ ; ELSE BEGIN PRINT «Сегодня будний день». ; ПЕЧАТЬ «На работу в будний день!» ; КОНЕЦ ;
WAITFOR
будет ждать заданное количество времени или до определенного времени суток. Этот оператор можно использовать для задержки или для блокировки выполнения до установленного времени.
RETURN
используется для немедленного возврата из хранимой процедуры или функции.
BREAK
завершает охватывающий WHILE
цикл, а CONTINUE
вызывает выполнение следующей итерации цикла. Пример цикла WHILE
приведен ниже.
ОБЪЯВИТЬ @i INT ; УСТАНОВИТЬ @i = 0 ; WHILE @i < 5 НАЧИНАЕТ ПЕЧАТЬ «Привет, мир». ; УСТАНОВИТЬ @i = @i + 1 ; КОНЕЦ ;
В Transact-SQL оба оператора DELETE
и UPDATE
расширены, чтобы позволить использовать в операции данные из другой таблицы без необходимости использования подзапроса:
DELETE
принимает в предложении объединенные таблицы FROM
, аналогично SELECT
. Когда это будет сделано, имя или псевдоним таблицы в объединении, из которой необходимо удалить, помещается между DELETE
и FROM
.UPDATE
позволяет FROM
добавить предложение. Таблица, подлежащая обновлению, может быть либо присоединена к FROM
предложению и на нее можно ссылаться по псевдониму, либо на нее можно ссылаться только в начале инструкции согласно стандартному SQL.В этом примере удаляются все users
, кто был помечен в user_flags
таблице флагом «бездействующий».
УДАЛИТЬ u ИЗ пользователей AS u INNER JOIN user_flags AS f ON u . идентификатор = ж . идентификатор ГДЕ f . имя = 'бездействующий' ;
BULK
— это оператор Transact-SQL, который реализует процесс массовой загрузки данных, вставляя несколько строк в таблицу и считывая данные из внешнего последовательного файла. Использование BULK INSERT
результатов приводит к повышению производительности по сравнению с процессами, которые выдают отдельные INSERT
операторы для каждой добавляемой строки. Дополнительные сведения доступны в MSDN.
Начиная с SQL Server 2005, [1] Microsoft представила дополнительную TRY CATCH
логику для поддержки поведения типов исключений. Такое поведение позволяет разработчикам упростить свой код и исключить @@ERROR
проверку после каждого оператора выполнения SQL.
-- начать транзакцию BEGIN TRAN ; BEGIN TRY — выполнить каждый оператор INSERT INTO MYTABLE ( NAME ) VALUES ( 'ABC' ); ВСТАВИТЬ В MYTABLE ( ИМЯ ) ЗНАЧЕНИЯ ( '123' ); -- подтвердить транзакцию COMMIT TRAN ; END TRY BEGIN CATCH — откатить транзакцию из-за ошибки ROLLBACK TRAN ; КОНЦЕВАЯ ЗАЩЕЛКА ;