将具有多个结果集的存储过程调用到另一个过程并使用它们

时间:2015-05-11 09:27:19

标签: stored-procedures

我有一个包含2个结果集的存储过程,我想将此sp调用到另一个存储过程中并获取它的结果集并使用它们。我已经在互联网上搜索并知道sql server 2012中用于此目的的新功能。它是'结果集'。

除了使用“结果集”之外,是否有另一个解决方案将具有多个结果集的调用storedprocedure放入另一个过程并使用它们?

Pinal Dave有一个使用'Result Sets'的例子

USE AdventureWorks2008R2
GO

CREATE PROCEDURE mySP1 (@ShiftID INT, @JobCandidateID INT)
AS

-- ResultSet 1

SELECT [ShiftID],[Name],[StartTime],[EndTime],[ModifiedDate]
FROM   [HumanResources].[Shift]
WHERE  [ShiftID] = @ShiftID

-- ResultSet 2

SELECT [JobCandidateID],[BusinessEntityID],[ModifiedDate]
FROM [HumanResources].[JobCandidate]
WHERE JobCandidateID = @JobCandidateID

CREATE PROCEDURE mySP2
AS
EXEC mySP1 @ShiftID = 2, @JobCandidateID = 5

WITH RESULT SETS
( ( [ShiftID] TINYINT,[Name] NVARCHAR(50),[StartTime] DATETIME,       [EndTime] DATETIME,[UpdateDate] DATETIME -- Notice Name Change
 ),([JobCandidateID] INT,[BusinessEntityID] INT,[ModifiedDate] DATETIME ));

当我们使用结果集时,我们将mysp1结果输入:

对于ResultSet1:

[ShiftID] TINYINT,[Name] NVARCHAR(50),[StartTime] DATETIME,
[EndTime] DATETIME,[UpdateDate] DATETIME

对于Resultset2:

[JobCandidateID] INT,[BusinessEntityID] INT,[ModifiedDate] DATETIME

但现在我想在mySp2中查询这些结果。我怎样才能做到这一点。 如何从以下选择值:

[ShiftID] TINYINT,[Name] NVARCHAR(50),[StartTime] DATETIME
,[EndTime] DATETIME,[UpdateDate] DATETIME

[JobCandidateID] INT,[BusinessEntityID] INT,[ModifiedDate] DATETIME

1 个答案:

答案 0 :(得分:0)

最佳解决方案可能是在mySP1中使用输出变量

CREATE PROCEDURE mySP1 (
@ShiftID INT
, @JobCandidateID INT
, @CUR1 CURSOR VARYING OUTPUT
)
SET NOCOUNT ON;
SET @CUR1 = CURSOR
FORWARD_ONLY STATIC FOR
    SELECT [ShiftID],[Name],[StartTime],[EndTime],[ModifiedDate]
    FROM   [HumanResources].[Shift]
    WHERE  [ShiftID] = @ShiftID

OPEN @CUR1;
GO

调用此sp:

DECLARE @MyCursor CURSOR;
EXEC dbo.mySP1 @ShiftID = 1, @JobCandidateID = 1, @CUR1 = @MyCursor OUTPUT;
WHILE (@@FETCH_STATUS = 0)
BEGIN;
     FETCH NEXT FROM @MyCursor;
END;
CLOSE @MyCursor;
DEALLOCATE @MyCursor;

将此组合与标准输出结合使用或仅声明另一个光标输出。