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

Posted

技术标签:

【中文标题】SQL Server:如果从 .net 代码中取消,则存储过程中打开的事务的默认操作【英文标题】:SQL Server: Default action for opened transaction in a stored procedure if cancelled from .net code 【发布时间】:2018-06-01 15:18:34 【问题描述】:

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

【问题讨论】:

你要取消执行是什么意思? 如果存储过程在 .NET 取消命令时尚未提交事务,则事务将回滚。如果它已经提交,取消将保留已经提交的事务,除非您从 .NET 中启动了一个事务——在这种情况下,存储过程的事务是一个嵌套事务,不会t 成功提交,直到外部事务提交。 这有助于@JeroenMostert。非常感谢。 【参考方案1】:

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

不要尝试同时在客户端和服务器上管理事务。任选其一。

【讨论】:

以上是关于SQL Server:如果从 .net 代码中取消,则存储过程中打开的事务的默认操作的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 的超时设置

解决安装SQL Server 2005开发版时,出现“SQL Server 服务无法启动 ”点击重试或取消的解决方法

如何使用json从sql server ASP.net中检索数据

使用 VB.NET 表单从 SQL Server 到 Excel 的日期数据检索

如何从 ASP.NET Core Web API 中的 SQL Server 存储过程中获取返回值

从 ASP.NET 中的 SQL Server 获取汇总/排序的数据