2011-02-02 181 views
5

是否可以在另一个存储过程中使用一个存储过程的结果?使用嵌套的存储过程结果调用存储过程Sql Server 2008

I.e.

CREATE PROCEDURE [dbo].[Proc1] 
     @ID INT, 
     @mfgID INT, 
     @DealerID INT 

AS 
BEGIN 

    DECLARE @Proc1Result UserDefinedTableVariable 

    EXEC @Proc1Result = Proc2 
     @SomeID = @ID, 
     @SomeID2 = @mfgID, 
     @SomeID3 = @DealerID 

    -- Now I want to use the table returned by the stored procedure here. 
    SELECT [col1],[col2] FROM @Proc1Result 

END 

我用INSERT INTO @Proc1Result EXEC Proc2 (with parameters passed)试过,但INSERT EXEC不能在嵌套的语句来调用。

有没有实现这一点的方法吗?环境是SQL Server 2008的

回答

9

可以通过嵌套存储过程up to 32 levels

我会推荐阅读过this article有关INSERT-EXEC。这里是一个SNIPPIT:

如果some_sp试图some_other_sp 用INSERT-EXEC打电话,你会得到一个 错误消息。因此,一次只能有一个INSERT-EXEC激活 。这个 是SQL Server的一个限制。

5

你是对的,INSERT ... EXEC不能嵌套。从How to Share Data Between Stored Procedures

它不能嵌套。如果some_sp试图 呼叫some_other_sp用INSERT-EXEC, 你会得到一个错误信息。因此, 一次只能有一个INSERT-EXEC 处于活动状态。这是SQL Server中的一个 限制。

你需要找到一些其他的方式。 Erland的文章链接几乎涵盖了所有的选项,并对其进行了详细讨论。

用于获取结果从另一一个SP
+0

我是如何发布完全相同的链接并在2分钟之前引用的,但你有更多的选票?必须是泰迪熊... – 2011-02-02 23:39:25

+1

@Abe:我已经格式化了程序名称,这需要花费数小时和数小时的工作,选民也很欣赏额外的努力;) – 2011-02-02 23:57:12

1

一个语法是:

INSERT INTO [myTable] 
EXEC Proc1 [param1], [param2], [param3], etc. 

但你必须首先创建表,它插入到与字段名和类型必须完全匹配。