存储过程返回2个结果数据集 - 有没有办法只将第一个数据集插入变量但仍然显示第二个?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程返回2个结果数据集 - 有没有办法只将第一个数据集插入变量但仍然显示第二个?相关的知识,希望对你有一定的参考价值。

我有一个运行一系列测试的父存储过程。在此过程中,父级会创建一个“日志”记录,并在实际执行测试之前将其设置为更新。

测试是一个存储过程,它根据结果返回“Y”或“N”,并返回返回所有记录的辅助结果集。我希望父存储过程抓住“Y”或“N”并将其粘贴到日志表中,但也显示次要结果集。

我打算将update语句放在子存储过程(测试本身)中,但是我需要为每次调用传递LogID。理想情况下,我只想从第一个数据集“Y”或“N”中获取结果并使用它,但我不确定这是否可行。

答案

使用OUTPUT参数返回结果:

ALTER PROCEDURE dbo.TestProcedure
    @ResultSuccessful BIT OUTPUT
AS
BEGIN

    -- Testing stuff

    IF (/*Test OK*/)
        SET @ResultSuccessful = 1
    ELSE
        SET @ResultSuccessful = 0

    -- Detailed results
    SELECT
        *
    FROM
        Results

END

像这样打电话给SP:

DECLARE @TestOK BIT

-- Will display results from SELECT
EXEC dbo.TestProcedure 
    @ResultSuccessful = @TestOK OUTPUT


IF @TestOK = 1
    -- Do stuff if OK
ELSE
    -- Do stuff if not
另一答案

如果不清楚,这里有一个快速示例,说明如何从一个存储过程返回两个结果。

CREATE PROCEDURE dbo.dummy (
    @id INT,
    @answer CHAR(1) OUTPUT)
AS
BEGIN
    SET NOCOUNT ON;

    --First result
    SELECT @answer = 'Y';

    --Second result
    SELECT @id AS id, 'dog' AS pet;
END;
GO
DECLARE @answer CHAR(1);
EXEC dbo.dummy 1, @answer OUTPUT;
SELECT @answer;
GO
DROP PROCEDURE dbo.dummy;

以上是关于存储过程返回2个结果数据集 - 有没有办法只将第一个数据集插入变量但仍然显示第二个?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在执行存储过程或函数时提前确定要返回的结果集的数量?

存储过程中的结果集总数

如何在存储过程中直接使用另一个存储过程返回的数据集

oracle 如何返回多条记录

在oracle里,多条返回结果,如何只能返回一条

C#中使用Oracle存储过程返回结果集