2009-07-07 2 views

ответ

66

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

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 

Как Mitch Wheat сказал, автокоммит по умолчанию для SQL Server 2000 и выше.

6

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

Ref: Autocommit Transactions

42

Мне нужен был более постоянный и быстрый путь. Потому что я, как правило, забываю добавить дополнительные строки, прежде чем писать свои фактические запросы «Обновить/Вставить».

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

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

+2

Я пробовал, и я могу подтвердить, что это похоже на то, что я написал SET IMPLICIT_TRANSACTIONS ON, так как кажется, что более правильный ответ за 24 часа я буду награждать щедростью. – Revious

2

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

Смежные вопросы