如何在其他存储过程中获取sql server存储过程结果?

时间:2014-02-10 10:04:19

标签: sql-server stored-procedures

我面临的情况是我需要在另一个存储过程中使用一个存储过程的结果。我的第一个存储过程返回一个表的子集,我想在第二个存储过程中使用它。

exec dbo.myprcedure param返回结果,但我需要在另一个存储过程中捕获它。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:0)

您可以使用view而不是存储过程。视图可以包含表中的选定数据。首先创建一个视图,然后在存储过程中调用视图

创建临时表。从临时表中可以获取数据

答案 1 :(得分:0)

如果只返回一个结果集,则可以创建临时表,然后使用语法

INSERT INTO #tmp
EXEC dbo.myprocedure @param

请参阅https://stackoverflow.com/a/14623262/8479

但总的来说,最好找到一种不同的方法,例如使用table-valued variables或使用函数而不是proc。

答案 2 :(得分:0)

在你内部执行第一个存储过程Secod存储过程并在那里使用结果。像

这样的东西
CREATE PROCEDURE Proc_2
@param
AS
BEGIN
 SET NOCOUNT ON;

/* Create a Temp Table here say #TempTable*/

INSERT INTO #TempTable
exec dbo.myporcedure @param 

/* Your rest of the code that needs to work with the result set of dbo.myporcedure */

END

答案 3 :(得分:0)

只需在FUNCTIONSTORED PROCEDURE中返回TABLE VARIABLE,然后在调用者存储过程中使用TABLE VARIABLE进行进一步处理,或者将其传递给另一个存储过程作为TABLE VARIABLE参数。

即。创建一个函数,如下所示返回一个TABLE VARIABLE。

CREATE PROCEDURE MyProcedureThatReturnsATable()
RETURNS  @ReturnTable TABLE 
(
    -- specify columns returned by the proc here
    ID INT NOT NULL,
    Name nvarchar(255) NOT NULL
)
AS
BEGIN
.
..
...

--This select returns data 
INSERT INTO @ReturnTable
SELECT ID, Name FROM SOME_TABLES

RETURN

END

然后在父存储过程中,您将执行上面的存储过程并在该父存储过程中填充TABLE变量,如下所示。

DECLARE @MyParentTableVariable as TABLE (ID INT, Name nvarchar(255))

INSERT INTO @MyParentTableVariable
EXECUTE MyProcedureThatReturnsATable

现在,在父存储过程中,您可以获得TABLE VARIABLE中MyProcedureThatReturnsATable的数据。