相关疑难解决方法(0)

如何在存储过程中回滚事务?

查看SQL Server联机丛书,Microsoft似乎有一种(不正确的)方法来处理存储过程中的嵌套事务:

嵌套交易

显式事务可以嵌套.这主要用于支持存储过程中的事务,这些事务可以从事务中已有的进程调用,也可以从没有活动事务的进程调用.

该示例继续显示一个启动其自己的事务的存储过程("该过程强制执行其事务,而不管执行它的任何进程的事务模式."):

CREATE PROCEDURE TransProc @PriKey INT, @CharCol CHAR(3) AS
   BEGIN TRANSACTION InProc
      ...
   COMMIT TRANSACTION InProc;
Run Code Online (Sandbox Code Playgroud)

然后可以在没有运行事务的情况下调用此过程:

EXECUTE TransProc 3,'bbb';
Run Code Online (Sandbox Code Playgroud)

或者使用显式交易:

BEGIN TRANSACTION OutOfProc;

EXEC TransProc 1, 'aaa';

COMMIT TRANSACTION OutOfProc
Run Code Online (Sandbox Code Playgroud)

他们没有解决的是存储的产品时会发生什么:

  • 失败并出现错误,但事务正在运行
  • 失败并出现错误,但不会使事务继续运行
  • 遇到错误,但在事务打开时继续执行
  • 遇到错误,但继续执行回滚事务

没有:

  • SET XACT_ABORT ON
  • @@ TRANCOUNT

在规范示例中的任何地方.

如果我不知道更好,我会想到这条线:

以下示例显示嵌套事务的预期用途.

应该真的读

以下示例显示了如何不使用嵌套事务.

除非有人能说出这个BOL例子的正面或反面?

sql-server stored-procedures sql-server-2008-r2

10
推荐指数
2
解决办法
6万
查看次数

在C#SQL Server调用的“使用”范围内,回滚是自动进行的吗?

众所周知,当为SQL Connection,Transaction和Command创建“ using”块时,众所周知,与using块关联的连接,事务或命令在离开using块之后会自行处理。

但是,如果在这些块之一中发生异常,例如在命令块中-事务是否会自行回滚,还是开发人员需要在命令“使用”块内进行try catch,然后添加回滚?尝试在事务处理语句中进行尝试?

c# sql transactions using rollback

5
推荐指数
2
解决办法
3269
查看次数