67

如何在 SQL Server 会话中设置自动提交?

4

4 回答 4

93

您可以通过设置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 及更高版本的默认设置。

于 2009-07-07T07:43:38.597 回答
52

我想要一种更持久、更快捷的方式。因为我倾向于在编写实际的更新/插入查询之前忘记添加额外的行。

我通过检查选项中的SET IMPLICIT_TRANSACTIONS复选框来做到这一点。导航到选项在 Microsoft SQL Server Management Studio 中选择工具>选项>查询执行>SQL Server>ANSI 。

只需确保执行commitrollback在执行完查询后执行。否则,您将运行查询的表将被其他人锁定。

于 2012-01-05T19:53:37.347 回答
9

自动提交是 SQL Server 的默认事务管理模式。(SQL 2000 以上)

参考:自动提交事务

于 2009-07-07T03:38:44.760 回答
2

使用 SQLServer 2005 Express,我发现即使使用autocommit off,在没有我实际从 Management Studio 会话中发出提交命令的情况下,也提交了对 Db 表的插入。唯一的区别是,当自动提交关闭时,我可以回滚所有插入;使用 * autocommit on,我不能。* 其实我错了。关闭自动提交模式后,我只能在发出命令的 QA(查询分析器)窗口中看到更改。如果我弹出一个新的 QA(查询分析器)窗口,我看不到第一个窗口(会话)所做的更改,即它们没有提交!我必须发出明确的提交或回滚命令才能使更改对其他会话(QA 窗口)可见——我的错!一切正常。

于 2012-02-26T04:56:32.327 回答