我有一个包含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
答案 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;
将此组合与标准输出结合使用或仅声明另一个光标输出。