Среда выполнения пакетов и режим MARS

Начиная с версии Microsoft SQL Server 2005 для соединений можно включить режим MARS. Эти соединения имеют связанную среду выполнения пакета по умолчанию.

Среда выполнения пакета состоит из следующих компонентов.

  • Значения параметра SET (включая ANSI_NULLS, DATE_FORMAT, LANGUAGE и TEXTSIZE).

  • Безопасный контекст (пользователь или роль приложения для среды выполнения пакета).

  • Контекст базы данных (текущая база данных для среды).

  • Функции состояния выполнения (включая @@ERROR, @@ROWCOUNT, @@FETCH_STATUS и @@IDENTITY).

  • Временные таблицы верхнего уровня.

Каждый новый пакет, начинающий выполнение для особого соединения, получает копию среды по умолчанию. Всякий раз при выполнении пакета все изменения в среде выполнения применяются к данному конкретному пакету. Как только выполнение завершается, настройки выполнения копируются в среду по умолчанию. В том случае, если один пакет выдает несколько команд для последовательного выполнения, наблюдается такое же поведение, как и при соединениях клиентов или серверов в прошлых выпусках SQL Server.

В предыдущей версии SQL Server только один пакет мог выполняться в определенный промежуток времени. Таким образом, изменения, произведенные пакетом в среде, были видны для всех последующих пакетов.

Для хранимых процедур и функций средой пакета по умолчанию является соединение по умолчанию, но по завершении выполнения изменения не копируются назад в среду выполнения пакета соединения по умолчанию.

Допустим, что два пакета выполняются следующим образом:

--First Batch
SET ARITHABORT ON
SET ANSI_WARNINGS ON
SELECT 1/0
GO
--Second Batch
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
SELECT 1/0
GO

Предположим, что режим MARS активирован для соединения со средой выполнения по умолчанию, где SET ARITHABORT установлено на OFF и SET ANSI_WARNINGS установлено на ON.

Если оба пакета отправляются одновременно, их выполнение начинается согласно настройкам среды пакета соединения по умолчанию. Во время выполнения их среда разграничивается, чтобы гарантировать, что изменения среды для одного пакета не повлияют на изменения среды для другого пакета. Когда пакет завершает выполнение, происходит обратное копирование полученной в результате среды в среду соединения по умолчанию. Получившаяся среда для соединения по умолчанию зависит от последнего пакета, закончившего выполнение. Эта среда будет использоваться следующим выполняемым пакетом.

См. также

Основные понятия