Как установить автоматическую фиксацию в сеансе 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
как сказал Митч Уит, autocommit является значением по умолчанию для Sql Server 2000 и выше.
Я хотел более постоянный и быстрый способ. Потому что я, как правило, забываю добавить дополнительные строки перед написанием моих фактических запросов на обновление/вставку.
Я сделал это путем проверки УСТАНОВИТЬ ПАРАМЕТРЫ IMPLICIT_TRANSACTIONS флажок из вариантов. Для перехода к параметрам выберите Сервис>Параметры>выполнение запросов>SQL Server>ANSI в среде Microsoft SQL Server Management Studio.
просто убедитесь, что для выполнения
commit
илиrollback
после завершения выполнения запросов. В противном случае таблица, в которой вы бы выполнили запрос, будет заблокирована для других.
с SQLServer 2005 Express, что я нашел, что даже с autocommit off, вставки в таблицу БД были зафиксированы без моего фактического выпуска команды фиксации из сеанса Management Studio. Разница была только в том, когда autocommit был выключен, я мог откатить все вставки; с *autocommit on, Я не мог.* на самом деле, я был неправ. при выключенном режиме автоматической фиксации я вижу изменения только в QA (анализатор запросов) окно, из которого были выданы команды. Если я открыл новое окно QA (Query Analyzer), я не вижу изменений, внесенных первым окном (сеансом), т. е. они не зафиксированы! Мне пришлось выдать явные команды фиксации или отката, чтобы сделать изменения видимыми для других сеансов (QA windows) -- мой плохой! Все работает правильно.