Почему SQL Server по умолчанию XACT_ABORT имеет значение OFF? Можно ли включить глобально?

Я понимаю цель команды SET XACT_ABORT:

Когда SET XACT_ABORT установлен в ON, если инструкция Transact-SQL вызывает ошибку во время выполнения, вся транзакция завершается и откатывается.

Когда SET XACT_ABORT имеет значение OFF, в некоторых случаях выполняется только откат оператора Transact-SQL, вызвавший ошибку, и транзакция продолжает обрабатываться. В зависимости от серьезности ошибки можно выполнить откат всей транзакции, даже если для SET XACT_ABORT установлено значение OFF. ВЫКЛ - настройка по умолчанию.

В общем, сценарии, в которых можно продолжить обработку транзакции, если ошибка будет превосходить нумерацию, в сценариях, в которых можно откатить всю транзакцию в случае ошибки, потому что я часто слышу, как администраторы и блоги рекомендуют сохранить SET XACT_ABORT ON чтобы избежать появления противоречивых результатов транзакции. Я видел все наши хранимые процедуры также SET XACT_ABORT ON, как часть шаблонного кода.

Quesions:

  1. Если большинство случаев использования требуют XACT_ABORT быть ONчто привело бы SQL Server по умолчанию к OFF? Будет дефолт XACT_ABORT в ON добавили какие-либо накладные расходы на обработку транзакций SQL Server?

  2. SET XACT_ABORT Команда влияет только на текущие сеансы. Я знаю, что могу сделать SSMS по умолчанию SET XACT_ABORT ON от SSMS > Tools > Options > Query Execution > SQL Server > Advanced как показано на этом изображении: введите описание изображения здесь Но это ограничено только для операторов SQL, выполняемых через SSMS, и не помогает с хранимыми процедурами, вызываемыми через пакеты кода приложения /SSIS. Для этих процедур я все еще должен повторить SET XACT_ABORT ON в каждой процедуре. Там в любом случае XACT_ABORT можно установить на ON на уровне базы данных? Любые другие способы, которыми я могу установить XACT_ABORT глобально и не нужно беспокоиться об этом каждый раз?

1 ответ

Решение

Вы можете установить XACT_ABORT ON как глобальная настройка соединения по умолчанию на уровне сервера, хотя команда немного неясна:

EXEC sys.sp_configure N'user options', N'16384'
GO
RECONFIGURE WITH OVERRIDE
GO

Смотрите здесь для деталей.

Опцию также можно установить через Обозреватель объектов SSMS> Свойства сервера> Подключения:

Другие вопросы по тегам