2011-11-01 115 views
16

我正在使用无自动提交连接到SQL Server。如果一切顺利,我会致电提交。否则,我只是退出。我是否需要显式调用回滚,或者当我们关闭连接而不提交时它会自动回滚?如果我从未提交,是否需要调用回滚?

如果有问题,我正在执行SAS中proc sql中的SQL命令。

更新:看起来SAS可能会在proc sql块的末尾自动调用commit,如果没有调用rollback的话。所以在这种情况下,回滚将不仅仅是好的做法。这将是必要的。

最终更新:我们最终切换到了一个新系统,这在我看来与我们之前的系统相反。在没有指定提交或回滚的情况下结束交易时,它将回滚。所以,下面给出的建议绝对是正确的:始终显式提交或回滚。

回答

7

应该在连接关闭时回滚。强调应该有一个原因:-)

适当的事务和错误处理应该让你在提交的条件满足时总是提交,当它们不合适时回滚。我认为在完成时始终提交或回滚是一个很好的习惯,而不是依赖于断开/等。所需要的只是一个错误或不正确的/未关闭的会话来为所有人创建一个阻塞链恶梦:-)

+1

连接池会对此产生什么影响? –

+0

如果您在管理交易时考虑到最佳实践,您不必担心,@JoeStefanelli :-)我的意思是 - 1.)尽可能快地进出您的交易 - 仅执行其中的必要操作以保持足迹和影响较小,并且2)正确的错误处理和清理在完成时提交,在不完成时回滚。如果违反了这两个基本原则,我不会批准改变我所处理的环境。所以连接池将不会有效果。 –

+0

同意当事情做得对时最好做你自己的显式提交。我的问题更多地针对您的答案中的“***应回滚关闭连接”部分。 –

相关问题