Как настроить автоматическую фиксацию в сеансе SQL Server?
Как настроить автоматическую фиксацию в сеансе SQL Server?
Ответы (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 и выше.
Я хотел более постоянный и быстрый способ. Потому что я обычно забываю добавлять дополнительные строки перед тем, как писать свои фактические запросы на обновление/вставку.
Я сделал это, установив флажок SET IMPLICIT_TRANSACTIONS в меню «Параметры». Чтобы перейти к параметрам, выберите Инструменты>Параметры>Выполнение запроса>SQL Server>ANSI в Microsoft SQL Server Management Studio.
Просто не забудьте выполнить commit
или rollback
после выполнения запросов. В противном случае таблица, к которой вы бы запустили запрос, будет заблокирована для других.
SET IMPLICIT_TRANSACTIONS ON
перед запуском DML, вы рискуете забыть запустить транзакцию и запустить оператор, который немедленно обновляет базу данных. Таким образом, правильным ответом было бы всегда включать транзакции, как говорится в этом ответе.
- person mike; 08.05.2019
Autocommit — это режим управления транзакциями SQL Server по умолчанию. (SQL 2000 и более поздние версии)
Ссылка: Автофиксация транзакций
В SQLServer 2005 Express я обнаружил, что даже при отключенной автофиксации вставки в таблицу базы данных фиксируются без фактического ввода команды фиксации из сеанса Management Studio. Единственная разница заключалась в том, что когда автокоммит был выключен, я мог откатить все вставки; с включенной *автоматической фиксацией я не смог.* На самом деле я был не прав. При выключенном режиме автоматической фиксации я вижу изменения только в QA (анализатор запросов ) окно, из которого были отправлены команды. Если я открыл новое окно QA (Query Analyzer), я не вижу изменений, сделанных первым окном (сеансом), т.е. они НЕ зафиксированы! Мне пришлось вводить явные команды фиксации или отката, чтобы сделать изменения видимыми для других сеансов (окна контроля качества) -- плохо! Все работает правильно.