TSQL:从另一个存储过程调用存储过程并读取结果
问题描述:
我有一个存储过程,以SELECT结尾,返回一个记录集。我可以这样称呼另一个存储过程:TSQL:从另一个存储过程调用存储过程并读取结果
EXEC procedure @param
如何获取返回的记录集?谢谢
答
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
...
答
如果您使用的是SQL Server 2008,我建议您返回一个Table-Valued参数。
+1
我认为TVP代表了一个只有输入的构造... OP似乎想要返回过程的输出? – iokevins 2012-12-24 20:01:12
答
您可以在存储过程中的输出变量做到这一点。例如:
CREATE PROCEDURE sp_HelloWorld @MyReturnValue int OUT
AS
SELECT @MyReturnValue = 100
Return @MyReturnValue
要调用这个存储过程,请执行以下操作:
DECLARE @TestReturnVal int
EXEC sp_HelloWorld @TestReturnVal output
SELECT @TestReturnVal
答
首先,你不能RETURN通过存储过程的记录集。通过返回,存储过程只能返回整数。
您提到了SELECT
声明,这是一个DQL,仅用于显示目的。
解决此问题的方法是您可以将记录集分配给全局临时表,该临时表也可以在外部存储过程中访问。
听起来像你的存储过程应该是一个视图:http://msdn.microsoft.com/en-us/library/aa258253%28SQL.80%29.aspx – 2010-06-14 17:06:21
你为什么要这样说?谁知道在更新等形式存储过程中发生了什么... – 2011-12-21 00:06:40