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

问题描述 投票:0回答:2

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

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

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

sql sql-server tsql stored-procedures
2个回答
1
投票

使用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

0
投票

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

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;
© www.soinside.com 2019 - 2024. All rights reserved.