你如何在SQL Server会话中设置自动提交?
-
11-09-2019 - |
题
您如何在SQL Server会话中设置自动提交?
解决方案
可以通过设置IMPLICIT_TRANSACTIONS OFF关闭自动提交ON:
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
像米奇小麦说,自动提交是SQL Server 2000和向上的缺省值。
其他提示
我想更长久和更快捷的方法。因为我总是忘记写我的实际更新之前添加额外的线路/插入查询。
我通过检查 SET IMPLICIT_TRANSACTIONS 从选项复选框做到了。 导航到选项选择工具>选项>查询执行器> SQL Server> ANSI 在您的Microsoft SQL Server Management Studio中。
只要确保你做执行你的查询后执行commit
或rollback
。否则,你会运行查询表将被锁定为别人着想。
自动提交是SQL Server的默认事务管理模式。 (SQL 2000年起)
价:自动提交事务
使用的SQLServer 2005 Express的,我发现是,即使是关闭自动提交后,插入到数据库中的表没有我的实际发放从Management Studio中会话的commit命令已提交。唯一的区别是,当<强>自动提交被关闭,我可以回滚所有的插入;带*号的自动提交的 ,我不能。的* 的事实上,我错了。。通过自动提交模式关闭,我看到仅在从所述命令被发出的QA(查询分析器)窗口的更改。如果我打开一个新的QA(查询分析器)窗口中,我没有看到的第一个窗口(会话)所做的更改,即它们不是承诺!我必须发出明确的commit或rollback命令做出其他会话(QA窗口)可见的变化 - 我的坏!东西都正常工作。强>