Транзакт-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
которые были отмечены в user_flags
таблица с флагом «бездействия».
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, [1] 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;
См. также
[ редактировать ]- Адаптивное серверное предприятие (Sybase)
- PL/SQL (Оракул)
- PL/pgSQL (PostgreSQL)
- SQL/PSM (стандарт ISO)
- Табличный поток данных
Ссылки
[ редактировать ]- ^ «Усовершенствования T-SQL в SQL Server 2012» , Джонатан Аллен, 19 марта 2012 г., infoq.com