2013-02-01 26 views
1

我正在使用sql server 2005並使用其他人編寫的舊存儲過程。我只是想調用存儲過程來獲取數據,而不是修改它。訪問sql server中的多個結果集

問題是存儲過程返回多個結果集完全相同的字段。只是數據有點不同。所以當存儲過程在前端被調用時,它被用來填充兩個不同的數據表,這很好。

但是現在我需要在excel中使用組合結果,所以沒有多個數據表的優點。

基本上我想創建一個新的存儲過程,通過調用現有storedproc返回兩個結果的聯合。我不想創建存儲過程的另一個副本,因爲我將不得不保持選項卡每次其他存儲的過程被更改,我將不得不改變我的。

有沒有辦法訪問sql server本身的第二個結果集。

感謝,

--Abhi

回答

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 
+0

優秀。正是我在找什麼。萬分感謝 !!! – Abbi