在sql server中访问多个结果集

时间:2013-02-01 22:24:32

标签: sql sql-server tsql sql-server-2005

我正在使用sql server 2005并使用由其他人编写的旧存储过程。我只是想调用存储过程来获取数据而不是修改它。

问题是存储过程返回多个具有完全相同字段的结果集。只是数据有点不同。因此,当在前端调用存储过程时,它被用于填充两个不同的数据表,这很好。

但是现在我需要在excel中使用组合结果,因此不具备多个数据表的优点。

基本上我想创建一个新的存储过程,只需调用现有的storedproc即可返回两个结果的并集。我不想创建存储过程的另一个副本,因为每当其他存储过程被更改时我将不得不保留标签我将不得不改变我的。

有没有办法在sql server本身访问第二个结果集。

谢谢,

- ABHI

1 个答案:

答案 0 :(得分:3)

创建一个代理程序,将两个集合抛出到临时表中,并从中进行选择。

这是一个测试示例......

/*Create first proc that returns two data sets*/
IF OBJECT_ID('ReturningTwoDataSets') IS NOT NULL
BEGIN
    DROP PROCEDURE ReturningTwoDataSets
END
GO

CREATE PROCEDURE dbo.ReturningTwoDataSets
AS
BEGIN
    SET NOCOUNT ON

    SELECT  '1' AS [col1]
            ,'2' AS [col2]
            ,'3' AS [col3]

    SELECT '4' AS [col1]
            ,'5' AS [col2]
            ,'6'  AS [col3]

END
GO



/*  
    Create new proc that combines both data sets 
    into a temp table and returns a single dataset
*/
IF OBJECT_ID('ReturningOneDataSet') IS NOT NULL
BEGIN
    DROP PROCEDURE ReturningOneDataSet
END
GO

CREATE PROCEDURE dbo.ReturningOneDataSet
AS
BEGIN
SET NOCOUNT ON

    IF OBJECT_ID('TempDB..#OneDataSet') IS NOT NULL
    BEGIN
        DROP TABLE #OneDataSet
    END

    CREATE TABLE #OneDataSet
    (
        [col1]  VARCHAR(100)
        ,[col2] VARCHAR(100)
        ,[col3] VARCHAR(100)
    )

    INSERT INTO #OneDataSet
    (
        col1
        ,col2
        ,col3
    )
    EXEC ReturningTwoDataSets


    SELECT * FROM #OneDataSet

END
GO

/*Execute the old proc*/
EXEC ReturningTwoDataSets 
/*Execute the new proc*/
EXEC ReturningOneDataSet