Transact-SQL - Transact-SQL
Transact-SQL ( T-SQL ) - это проприетарное расширение Microsoft и Sybase для языка SQL (язык структурированных запросов), используемого для взаимодействия с реляционными базами данных . T-SQL расширяет стандарт SQL и включает процедурное программирование , локальные переменные , различные вспомогательные функции для обработки строк, обработки дат, математики и т. Д., А также изменения в операторах DELETE и UPDATE .
Transact-SQL играет центральную роль в использовании Microsoft SQL Server . Все приложения, которые взаимодействуют с экземпляром SQL Server, делают это, отправляя операторы Transact-SQL на сервер, независимо от пользовательского интерфейса приложения.
Хранимые процедуры в SQL Server - это исполняемые процедуры на стороне сервера. Преимущество хранимых процедур - возможность передавать параметры.
Переменные
Transact-SQL предоставляет следующие операторы декларировать и набор локальных переменных: DECLARE
, SET
и SELECT
.
DECLARE @var1 NVARCHAR(30);
SET @var1 = 'Some Name';
SELECT @var1 = Name
FROM Sales.Store
WHERE CustomerID = 100;
Управление потоком
Ключевые слова для управления потоком данных в Transact-SQL включают в себя BEGIN
и END
, BREAK
, CONTINUE
, GOTO
, IF
и ELSE
, RETURN
, WAITFOR
, и WHILE
.
IF
и ELSE
разрешить условное исполнение. Этот пакетный оператор напечатает «Сейчас выходные», если текущая дата - выходной день, или «Это будний день», если текущая дата - будний день. (Примечание: этот код предполагает, что воскресенье настроено как первый день недели в @@DATEFIRST
настройке.)
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
PRINT 'It is the weekend.';
ELSE
PRINT 'It is a weekday.';
BEGIN
и END
отметьте блок утверждений . Если более чем один оператор должен контролироваться условным в приведенном выше примере, мы можем использовать BEGIN
и END
как это:
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
BEGIN
PRINT 'It is the weekend.';
PRINT 'Get some rest on the weekend!';
END;
ELSE
BEGIN
PRINT 'It is a weekday.';
PRINT 'Get to work on a weekday!';
END;
WAITFOR
будет ждать заданное время или до определенного времени суток. Оператор может использоваться для задержек или для блокировки выполнения до установленного времени.
RETURN
используется для немедленного возврата из хранимой процедуры или функции.
BREAK
завершает охватывающий WHILE
цикл, а CONTINUE
вызывает выполнение следующей итерации цикла. Пример WHILE
цикла приведен ниже.
DECLARE @i INT;
SET @i = 0;
WHILE @i < 5
BEGIN
PRINT 'Hello world.';
SET @i = @i + 1;
END;
Изменения в операторах DELETE и UPDATE
В Transact-SQL, как DELETE
и UPDATE
утверждения расширены для включения данных из другой таблицы , которые будут использоваться в операции, без необходимости подзапроса:
-
DELETE
принимает объединенные таблицы вFROM
предложении аналогичноSELECT
. Когда это будет сделано, имя или псевдоним, из которого должна быть удалена таблица в объединении, помещается междуDELETE
иFROM
. -
UPDATE
позволяет добавитьFROM
пункт. Обновляемая таблица может быть либо объединена вFROM
предложении и на нее можно ссылаться по псевдониму, либо на нее можно ссылаться только в начале оператора в соответствии со стандартным SQL.
В этом примере удаляются все, users
кто отмечен флажком «Idle».
DELETE u
FROM users AS u
INNER JOIN user_flags AS f
ON u.id = f.id
WHERE f.name = 'idle';
ОБЪЕМНАЯ ВСТАВКА
BULK
- это оператор Transact-SQL, который реализует процесс массовой загрузки данных, вставляя несколько строк в таблицу, считывая данные из внешнего последовательного файла. Использование BULK INSERT
результатов обеспечивает лучшую производительность, чем процессы, которые выдают отдельные INSERT
операторы для каждой добавляемой строки. Дополнительные сведения доступны в MSDN .
ПОПРОБУЙ ПОЙМАТЬ
Начиная с SQL Server 2005, Microsoft ввела дополнительную TRY CATCH
логику для поддержки поведения типа исключения. Такое поведение позволяет разработчикам упростить свой код и исключить @@ERROR
проверку после каждого оператора выполнения SQL.
-- begin transaction
BEGIN TRAN;
BEGIN TRY
-- execute each statement
INSERT INTO MYTABLE(NAME) VALUES ('ABC');
INSERT INTO MYTABLE(NAME) VALUES ('123');
-- commit the transaction
COMMIT TRAN;
END TRY
BEGIN CATCH
-- roll back the transaction because of error
ROLLBACK TRAN;
END CATCH;
Смотрите также
- Adaptive Server Enterprise (Sybase)
- PL / SQL (Oracle)
- PL / pgSQL (PostgreSQL)
- SQL / PSM (стандарт ISO)
- Sys.sysobjects
- Табличный поток данных