我有两个存储过程,我从另一个存储过程调用一个存储过程,并在两个存储过程中使用事务。下面是存储过程,如下图所示SQL Server中的嵌套SQL事务
CREATE PROCEDURE [dbo].[spOuter]
AS
BEGIN
begin tran t1
-- some sql queries..
Exec spInner;
commit tran t1
END
CREATE PROCEDURE [dbo].[spInner]
AS
BEGIN
begin tran t2
– some sql queries.
rollback tran t2
END
但在执行这个时候,它显示错误:
Cannot roll back t2. No transaction or savepoint of that name was found.
任何人都可以解释为什么它显示?
你打电话 “spInsertInner”,但PROC被命名为 “微调”。你有没有给我们实际的代码? – Charles
@Charles对不起,我的错误,我纠正了它。 – user3166407
如果在内部存储过程和内部事务中回滚,**所有**事务都会回滚。所以当你从内部存储过程返回时,没有更多的事务需要提交。 SQL Server只能“伪造”嵌套事务 - 它们并不像你所期望的那样工作 - [见Paul Randal的SQL Server神话 - 一天:嵌套事务是真实的](http://www.sqlskills.com/blogs/ paul/a-sql-server-dba-myth-a-day-2630-nested-transactions-are-real /)获取更多信息 –