在SPROC2中使用SPROC1:处理/消耗RETURN值和结果集

时间:2015-02-12 16:10:21

标签: sql-server

假设:

CREATE PROCEDURE [SPROC1] 

AS
BEGIN   
    BEGIN TRY
        BEGIN TRANSACTION   
        -- do some stuff        
        COMMIT TRANSACTION 
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION ;
        -- May have SELECT "Error Message XYZ" as ErrorMessage;
        RETURN -5
    END CATCH   

    SELECT * FROM MyTable;
    RETURN 1
END
GO

如果在另一个SPROC中,我需要检查返回值并迭代结果集,我该怎么办?

这将在SSMS中返回,但不允许我捕获结果集以供进一步消费。

DECLARE @rValue int
EXEC    @rValue = SPROC1
SELECT  'Return Value' = @rValue

如果有多个SELECT来自SPROC1怎么办?

1 个答案:

答案 0 :(得分:2)

您最好的选择是每个存储过程返回一个结果集。然后,如果您需要遍历调用sproc中的数据,则可以使用this stackoverflow entry中记录的技术。

如果您绝对需要包含返回值,则可以考虑将其添加为结果集中的行或其他列。或者甚至更好的是计算"返回值"如果可能的话,在基于结果集的调用sproc中(即没有记录,记录状态等)。不幸的是,我没有遇到更好的选择。