Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQLTransaction和T-SQL事务_Sql Server 2005_Tsql_Transactions_Rollback - Fatal编程技术网

Sql server 2005 SQLTransaction和T-SQL事务

Sql server 2005 SQLTransaction和T-SQL事务,sql-server-2005,tsql,transactions,rollback,Sql Server 2005,Tsql,Transactions,Rollback,我正在使用.NET2.0和SQLServer2005。出于历史原因,应用程序代码使用SQLTransaction,但一些存储过程也使用T-SQL begin/commit/rollback tran语句。其思想是DBTransaction可以跨越许多存储过程,每个存储过程控制其范围内发生的事情——实际上,这些是嵌套事务 代码的旧行为是,如果任何存储过程失败,应用程序逻辑也会导致外部SQLTransaction也回滚。但是现在我们想更改逻辑,这样即使出现故障,外部事务也应该继续按顺序执行剩余的存储

我正在使用.NET2.0和SQLServer2005。出于历史原因,应用程序代码使用SQLTransaction,但一些存储过程也使用T-SQL begin/commit/rollback tran语句。其思想是DBTransaction可以跨越许多存储过程,每个存储过程控制其范围内发生的事情——实际上,这些是嵌套事务

代码的旧行为是,如果任何存储过程失败,应用程序逻辑也会导致外部SQLTransaction也回滚。但是现在我们想更改逻辑,这样即使出现故障,外部事务也应该继续按顺序执行剩余的存储过程,然后在最后,因为我们知道有故障,所以我们回滚整个SQLTransaction

问题在于,至少按照目前的编码,如果任何存储过程执行回滚,外部SQLTransaction似乎会失去连接,因此任何后续重用事务的尝试都会失败。有没有一种方法可以在T-SQL中回滚,但仍然保持外部SQLTransaction?我在想,保存点在这里可能会有所帮助,但我还不太了解它们

使这种情况复杂化的是,并不总是存在外部事务,因此我不能仅仅删除t-SQL回滚,也就是说,有时存储过程是自己执行的;有时在事务的上下文中

切换到TransactionScope会让事情变得更简单吗


感谢您的建议…Mike查看此知识库条目:


回滚存储过程中的事务将导致ADO.NET客户端中的任何“外部”事务消失。唯一的解决方案是将Rollback()调用包装在try/catch块中。如果发生这种情况,我认为不可能维护外部事务。

请查看此知识库条目:


回滚存储过程中的事务将导致ADO.NET客户端中的任何“外部”事务消失。唯一的解决方案是将Rollback()调用包装在try/catch块中。如果发生这种情况,我认为不可能维护外部事务。

< P>我建议您考虑将外部事务放置在存储过程中,以便在TSQL中保持所有嵌套(使用Excel调用其他存储的PROC)。SQL Server是一个异常丰富的开发/数据管理环境,它允许您以ADO笨拙处理的方式管理事务。请记住,在一个存储的进程中把一堆SQL组合起来比在一个ADO连接上进行多个调用几乎总是更有效率。

< P>我建议你把你的外部事务放在一个存储过程中,这样你就可以在TSQL中保持所有嵌套。(使用EXEC调用其他存储的进程).SQL Server是一个异常丰富的开发/数据管理环境,允许您以ADO处理笨拙的方式管理事务。请记住,在存储过程中将一组SQL组合在一起几乎总是比通过ADO连接进行多个调用更有效。

它可能会基本上,您可以使用它来更改存储过程的事务依赖模式。在许多情况下,这是一个更简单的解决方案。

您可能会对基本上使用它来查看感兴趣,您可以更改存储过程的事务依赖模式。在许多情况下,这是一个更简单的解决方案