SQL事务回滚仍返回输出变量值

时间:2018-02-07 22:27:03

标签: sql-server transactions

我有一个带有封装事务的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

我错过了什么吗?我的印象是仍然应该返回输出变量,即使事务仍然回滚。

有没有办法可以获得输出变量,即使在事务回滚后也是如此?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您需要为输出变量指定OUTPUT。例如exec dbo.dothings 81, @success OUTPUT, @step OUTPUT

取自上述ZLK评论:

相关问题