【发布时间】:2012-07-17 21:47:48
【问题描述】:
查看 SQL Server 联机丛书,微软似乎有一个(不正确的)method of handling nested transactions in a stored procedure:
嵌套事务
显式事务可以嵌套。这主要是为了支持存储过程中的事务,这些事务既可以从已经在事务中的进程调用,也可以从没有活动事务的进程调用。
这个例子继续展示了一个存储过程,它启动了它自己的事务(“无论执行它的任何进程的事务模式如何,这个过程都会强制执行它的事务。”):
CREATE PROCEDURE TransProc @PriKey INT, @CharCol CHAR(3) AS
BEGIN TRANSACTION InProc
...
COMMIT TRANSACTION InProc;
然后可以在不运行事务的情况下调用此过程:
EXECUTE TransProc 3,'bbb';
或与显式交易:
BEGIN TRANSACTION OutOfProc;
EXEC TransProc 1, 'aaa';
COMMIT TRANSACTION OutOfProc
他们没有解决的是存储产品时会发生什么:
- 因错误而失败,但让事务继续运行
- 因错误而失败,但不会让事务继续运行
- 遇到错误,但在事务打开的情况下继续执行
- 遇到错误,但事务回滚后继续执行
没有:
SET XACT_ABORT ON- @@TRANCOUNT
规范示例中的任何位置。
如果我不知道更好,我会认为那行:
以下示例显示了嵌套事务的预期用途。
应该实际阅读
以下示例展示了如何不使用嵌套事务。
除非有人能对这个 BOL 示例做出正面或反面?
【问题讨论】:
-
@RemusRusanu 现在输入
SET XACT_ABORT ON和BEGIN DISTRIBUTED TRANSACTION
标签: sql-server stored-procedures sql-server-2008-r2