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

C# SQL Server:如果从.net代码中取消,则存储过程中已打开事务的默认操作,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我正在.net代码上执行一个存储过程。存储过程已启动begin事务,只有在没有错误时才会提交,否则将回滚该事务。如果要从.net代码中取消存储过程的执行,事务将被提交还是回滚?默认行为是,在客户端取消进程后,在进程代码中以BEGIN TRAN启动的事务将保持打开状态。您可以(并且应该)向存储过程添加SET XACT_ABORT ON,以便SQL Server在应用程序取消请求或超时后自动回滚事务。当在存储过程中使用显式事务以避免在不经意间使事务处于打开状态的时间超过必要的时间,或者更糟糕的是,在

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

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


不要试图同时管理客户端和服务器上的事务。选择其中一个。

取消执行是什么意思?如果存储过程尚未在.NET取消命令时提交事务,则事务将回滚。如果已提交,取消将保留已提交的事务,除非您还从.NET中启动了事务——在本例中,存储过程的事务是嵌套事务,只有外部事务提交后才能成功提交。这有助于@JeroenMostert。谢谢。