1

私はSQL Server 2005で作業しており、他の誰かによって書かれた古いストアドプロシージャで作業しています。そのストアド プロシージャを呼び出してデータを取得し、変更しないようにしたいだけです。

問題は、ストアド プロシージャがまったく同じフィールドを持つ複数の結果セットを返すことです。ただ、データが少し異なります。したがって、そのストアド プロシージャがフロント エンドで呼び出されると、2 つの異なるデータ テーブルを設定するために使用されますが、これは問題ありません。

しかし、今は結合された結果を Excel で処理する必要があるため、複数のデータ テーブルの利点はありません。

基本的に、既存のストアド プロシージャを呼び出すだけで 2 つの結果の和集合を返す新しいストアド プロシージャを作成したいと考えています。他のストアド プロシージャが変更されるたびにタブを保持する必要があるため、ストアド プロシージャの別のコピーを作成したくありません。

SQL サーバー自体で 2 番目の結果セットにアクセスする方法はありますか。

ありがとう、

――アビ

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 に答える