2010-06-14 160 views
30

我有一个存储过程,以SELECT结尾,返回一个记录集。我可以这样称呼另一个存储过程:TSQL:从另一个存储过程调用存储过程并读取结果

EXEC procedure @param 

如何获取返回的记录集?谢谢

+2

听起来像你的存储过程应该是一个视图:http://msdn.microsoft.com/en-us/library/aa258253%28SQL.80%29.aspx – 2010-06-14 17:06:21

+2

你为什么要这样说?谁知道在更新等形式存储过程中发生了什么... – 2011-12-21 00:06:40

回答

2

AFAIK,你不能。你可能想要做的是为你的第一个(或两个)过程使用一个函数。函数只能返回一个东西,但他们可以返回一个表。存储过程可以返回多个结果,但不能返回到其他函数/存储过程。

例如为:

CREATE FUNCTION [dbo].[fn_GetSubordinates] (
    @sPersonID VARCHAR(10), 
    @nLevels INT 
) 
RETURNS @tblSubordinates TABLE 
(
    Person_Id VARCHAR(10), 
    Surname char(25), 
    Firstname char(25) 
) 
AS 
BEGIN 
    ... 
29

您可以创建一个临时表,然后使用INSERT INTO #MyTable EXEC procedure @param

还有一些其他techniques listed here

1

您可以在存储过程中的输出变量做到这一点。例如:

CREATE PROCEDURE sp_HelloWorld @MyReturnValue int OUT 
AS 
SELECT @MyReturnValue = 100 
Return @MyReturnValue 

要调用这个存储过程,请执行以下操作:

DECLARE @TestReturnVal int 

EXEC sp_HelloWorld @TestReturnVal output 
SELECT @TestReturnVal 
0

首先,你不能RETURN通过存储过程的记录集。通过返回,存储过程只能返回整数。

您提到了SELECT声明,这是一个DQL,仅用于显示目的。

解决此问题的方法是您可以将记录集分配给全局临时表,该临时表也可以在外部存储过程中访问。

相关问题