你如何在SQL Server会话中设置自动提交?
Answer 1:
您可以通过设置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和的默认。
Answer 2:
我想要一个更持久和更快捷的方法。 因为我总是忘记写我的实际更新之前添加额外的线路/插入查询。
我通过检查SET IMPLICIT_TRANSACTIONS复选框从选项做到了。 导航到选项选择工具>选项>查询执行器> SQL Server> ANSI在您的Microsoft SQL Server Management Studio中。
只要确保执行commit
或rollback
完成后执行你的查询后。 否则,你会运行查询表将被锁定为别人着想。
Answer 3:
自动提交是SQL Server的默认事务管理模式。 (SQL 2000年起)
参考: 自动提交事务
Answer 4:
与SQLServer的2005 Express的,我发现,即使关闭自动提交 ,插入到一个db表中没有我的实际发放从Management Studio中会话的commit命令提交。 唯一的区别是,当自动提交被关闭,我可以回滚所有插入; 与 * 自动提交 ,我不能。 * 其实,我错了。 随着自动提交模式的时候,我看到的只是从其中的命令发出的QA(查询分析器)窗口中的变化。 如果我打开一个新的QA(查询分析器)窗口中,我没有看到的第一个窗口(会话)所做的更改,即它们没有承诺! 我必须发出明确的commit或rollback命令做出其他会话(QA窗口)可见的变化- 我的厉害! 事情是否正常工作。