假设:
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怎么办?
答案 0 :(得分:2)
您最好的选择是每个存储过程返回一个结果集。然后,如果您需要遍历调用sproc中的数据,则可以使用this stackoverflow entry中记录的技术。
如果您绝对需要包含返回值,则可以考虑将其添加为结果集中的行或其他列。或者甚至更好的是计算"返回值"如果可能的话,在基于结果集的调用sproc中(即没有记录,记录状态等)。不幸的是,我没有遇到更好的选择。