Как настроить автоматическую фиксацию в сеансе SQL Server?

Как настроить автоматическую фиксацию в сеансе SQL Server?


person hawkeye    schedule 07.07.2009    source источник


Ответы (4)


Вы можете включить автоматическую фиксацию, отключив implicit_transactions:

SET IMPLICIT_TRANSACTIONS OFF

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

Может пример понятнее. Это запишет изменение в базу данных:

SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
COMMIT TRANSACTION

Это не запишет изменения в базу данных:

SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION

Следующий пример обновит строку, а затем сообщит об отсутствии транзакции для фиксации:

SET IMPLICIT_TRANSACTIONS OFF
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION

Как сказал Митч Уит, автофиксация используется по умолчанию для Sql Server 2000 и выше.

person Andomar    schedule 07.07.2009

Я хотел более постоянный и быстрый способ. Потому что я обычно забываю добавлять дополнительные строки перед тем, как писать свои фактические запросы на обновление/вставку.

Я сделал это, установив флажок SET IMPLICIT_TRANSACTIONS в меню «Параметры». Чтобы перейти к параметрам, выберите Инструменты>Параметры>Выполнение запроса>SQL Server>ANSI в Microsoft SQL Server Management Studio.

Просто не забудьте выполнить commit или rollback после выполнения запросов. В противном случае таблица, к которой вы бы запустили запрос, будет заблокирована для других.

person Watt    schedule 05.01.2012
comment
Я пытался и могу подтвердить, что это выглядит точно так же, как написать SET IMPLICIT_TRANSACTIONS ON, поскольку кажется более правильным ответом через 24 часа, я награжу награду. - person Revious; 28.03.2014
comment
@hawkeye Это должен быть принятый ответ. Смысл отключения Autocommit в том, чтобы избежать ошибок, которых можно добиться изменением настроек. если вам нужно не забыть запустить SET IMPLICIT_TRANSACTIONS ON перед запуском DML, вы рискуете забыть запустить транзакцию и запустить оператор, который немедленно обновляет базу данных. Таким образом, правильным ответом было бы всегда включать транзакции, как говорится в этом ответе. - person mike; 08.05.2019

Autocommit — это режим управления транзакциями SQL Server по умолчанию. (SQL 2000 и более поздние версии)

Ссылка: Автофиксация транзакций

person Mitch Wheat    schedule 07.07.2009

В SQLServer 2005 Express я обнаружил, что даже при отключенной автофиксации вставки в таблицу базы данных фиксируются без фактического ввода команды фиксации из сеанса Management Studio. Единственная разница заключалась в том, что когда автокоммит был выключен, я мог откатить все вставки; с включенной *автоматической фиксацией я не смог.* На самом деле я был не прав. При выключенном режиме автоматической фиксации я вижу изменения только в QA (анализатор запросов ) окно, из которого были отправлены команды. Если я открыл новое окно QA (Query Analyzer), я не вижу изменений, сделанных первым окном (сеансом), т.е. они НЕ зафиксированы! Мне пришлось вводить явные команды фиксации или отката, чтобы сделать изменения видимыми для других сеансов (окна контроля качества) -- плохо! Все работает правильно.

person Raj    schedule 26.02.2012