【发布时间】:2015-01-30 07:25:06
【问题描述】:
我在尝试执行以下查询时遇到错误。
if exists (select null from sys.sysobjects where type='P' and name = 'myProc')
drop PROCEDURE myProc
go
create procedure myProc
as
begin
set nocount on
set xact_abort on
begin try
declare @trancount int = @@trancount
if @trancount = 0
begin tran
else
save tran MySave
raiserror ('123213123',16,1)
if @trancount = 0
commit
end try
begin catch
if @trancount = 0
rollback
else
if XACT_STATE() = 1
rollback tran MySave
else
rollback
end catch
end
go
begin tran
EXEC myProc
if @@TRANCOUNT >0
rollback
错误是
EXECUTE 之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 1,当前计数 = 0。
我已经阅读了许多关于类似问题的主题,但到目前为止还不清楚我的情况是什么原因。 谁能解释我为什么会得到它以及我应该怎么做才能避免它。 提前致谢
更新。我可以像这样简化 MyProc 的代码
create procedure myProc
as
begin
set nocount on
set xact_abort on
begin try
begin tran
raiserror ('123213123',16,1)
commit
end try
begin catch
rollback
end catch
end
go
它不能解决我的问题。出现同样的错误
【问题讨论】:
标签: sql-server nested-transactions