【发布时间】:2010-11-08 13:57:12
【问题描述】:
如何在 SQL Server 会话中设置自动提交?
【问题讨论】:
标签: sql-server session autocommit
如何在 SQL Server 会话中设置自动提交?
【问题讨论】:
标签: sql-server session autocommit
您可以通过设置implicit_transactions 关闭自动提交:
SET IMPLICIT_TRANSACTIONS OFF
设置为 ON 时,返回隐式事务模式。在隐式事务模式下,您所做的每一次更改都会启动一个您必须手动提交的事务。
也许一个例子更清楚。这会将更改写入数据库:
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 及更高版本的默认设置。
【讨论】:
我想要一种更持久、更快捷的方式。因为我倾向于在编写实际的更新/插入查询之前忘记添加额外的行。
我通过检查选项中的 SET IMPLICIT_TRANSACTIONS 复选框来做到这一点。 导航到选项 在 Microsoft SQL Server Management Studio 中选择 Tools>Options>Query Execution>SQL Server>ANSI。
请确保在执行完查询后执行commit 或rollback。否则,您将运行查询的表将被其他人锁定。
【讨论】:
SET IMPLICIT_TRANSACTIONS ON,则可能会忘记启动事务并运行立即更新数据库的语句。因此,正确的答案是始终按照此答案所述开启事务。
自动提交是 SQL Server 的默认事务管理模式。 (SQL 2000 以上)
【讨论】:
使用 SQLServer 2005 Express,我发现即使在 autocommit off 的情况下,在没有我实际从 Management Studio 会话中发出提交命令的情况下也提交了对 Db 表的插入。唯一的区别是,当 autocommit 关闭时,我可以回滚所有插入;使用 *autocommit on,我不能。* 实际上,我错了。 关闭自动提交模式后,我只能在发出命令的 QA(查询分析器)窗口中看到更改。如果我弹出一个新的 QA(查询分析器)窗口,我看不到第一个窗口(会话)所做的更改,即它们没有提交!我必须发出明确的提交或回滚命令才能使更改对其他会话(QA 窗口)可见——我的错!一切正常。
【讨论】: