我有一个带有封装事务的SQL Stored Proc,并且在某个地方SP内部发生了错误,但我无法分辨到哪里。我正在尝试使用@Step
变量来跟踪错误发生的位置,但它无法正常工作。基本上,这就是我所拥有的:
ALTER PROCEDURE dbo.[DoThings]
@id int,
@Success char(1) OUTPUT,
@Step varchar(200) OUTPUT
AS
BEGIN
Begin Transaction
begin try
set @Step = '101'
-- do some stuff here
set @Step = '102'
-- do other stuff here
set @Step = '103'
-- do final stuff here
set @Success = '1'
commit transaction
end try
begin catch
rollback transaction
--if there was an error, return 0 as the Success return value
set @Success = '0'
end catch
END
当我跑
时declare @success as bit
declare @step varchar(200)
exec dbo.[DoThings] 81, @success, @step
select @success, @step
逻辑中某处出现错误,我返回null, null
。
我错过了什么吗?我的印象是仍然应该返回输出变量,即使事务仍然回滚。
有没有办法可以获得输出变量,即使在事务回滚后也是如此?
提前致谢!
答案 0 :(得分:0)
您需要为输出变量指定OUTPUT。例如exec dbo.dothings 81, @success OUTPUT, @step OUTPUT
取自上述ZLK评论: