日期:2014-05-17  浏览次数:20877 次

关于存储过程返回值及内嵌事务的问题,急,盼解答
本帖最后由 pangdecai 于 2013-03-14 20:50:49 编辑
如题,遇到一个类似于以下存储过程的问题
ALTER PROC [AA]
    @A    INT
BEGIN
    BEGIN TRANSACTION;
    IF @A > 0
    BEGIN
        COMMIT TRANSACTION;
        RETURN 0;
    END
    ELSE
    BEGIN
        ROLLBACK TRANSACTION;
        RETURN 1;
    END
END
执行存储过程的时候,如果参数为正,那么提交事务,返回值为0,这个没问题,但是如果参数不为正,那么肯定是要回滚事务的,如果回滚事务就无法取得返回值了,如果在ROLLBACK TRANSACTION;之前返回那么就会积压事务,如果先ROLLBACK TRANSACTION,那就无法取得返回值,请问这个问题怎么解决?
存储过程 事务 返回值

------解决方案--------------------
事务是基于对数据库的操作的记录,你的返回值还有变量一类的存亡对数据库数据及结构没有影响,事务日志是不会记录他们的操作的,所以你提交跟回滚对返回值没有影响
------解决方案--------------------
在存储过程中,ROLLBACK TRANSACTION 语句不影响调用该过程的批处理中的后续语句;将执行批处理中的后续语句。