如何在 SQL Server 会话中设置自动提交?
4 回答
您可以通过设置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 中选择工具>选项>查询执行>SQL Server>ANSI 。
只需确保执行commit
或rollback
在执行完查询后执行。否则,您将运行查询的表将被其他人锁定。
自动提交是 SQL Server 的默认事务管理模式。(SQL 2000 以上)
参考:自动提交事务
使用 SQLServer 2005 Express,我发现即使使用autocommit off,在没有我实际从 Management Studio 会话中发出提交命令的情况下,也提交了对 Db 表的插入。唯一的区别是,当自动提交关闭时,我可以回滚所有插入;使用 * autocommit on,我不能。* 其实我错了。关闭自动提交模式后,我只能在发出命令的 QA(查询分析器)窗口中看到更改。如果我弹出一个新的 QA(查询分析器)窗口,我看不到第一个窗口(会话)所做的更改,即它们没有提交!我必须发出明确的提交或回滚命令才能使更改对其他会话(QA 窗口)可见——我的错!一切正常。