首页 > 解决方案 > SQL Server:如果从 .net 代码中取消,则存储过程中打开的事务的默认操作

问题描述

我正在我的 .net 代码上执行存储过程。存储过程已经开始事务,只有在没有错误时才提交,否则将回滚事务。如果我要从我的 .net 代码中取消存储过程的执行,事务将被提交还是回滚?

标签: c#sql-serverstored-procedures

解决方案


默认行为是在 proc 代码中启动的事务BEGIN TRAN将在客户端取消 proc 后保持打开状态。您可以(并且应该)添加SET XACT_ABORT ON到存储过程,以便 SQL Server 在应用程序取消请求或超时后自动回滚事务。当人们在存储过程中使用显式事务以避免无意中使事务打开的时间超过必要的时间,或者更糟糕的是,在不知情的情况下执行与打开的事务相关的其他工作时,这是一种最佳实践。

不要尝试同时在客户端和服务器上管理事务。选择一个或另一个。


推荐阅读