1

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

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

但现在我需要在 excel 中处理组合结果,因此没有多个数据表的优势。

基本上我想创建一个新的存储过程,它通过调用现有的存储过程返回两个结果的联合。我不想创建存储过程的另一个副本,因为每次更改其他存储过程时我都必须保持标签,我将不得不更改我的。

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

谢谢,

——阿比

4

1 回答 1

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
于 2013-02-02T01:19:42.633 回答