使用嵌套存储过程结果调用存储过程Sql Server 2008

时间:2011-02-02 22:25:38

标签: sql sql-server sql-server-2008 stored-procedures

是否可以在另一个存储过程中使用一个存储过程的结果?

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。

3 个答案:

答案 0 :(得分:10)

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

我建议阅读有关INSERT-EXEC的this article。这是一个snippit:

  

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

答案 1 :(得分:5)

你是对的,INSERT ... EXEC无法筑巢。来自How to Share Data Between Stored Procedures

  

它无法筑巢。如果some_sp尝试   使用INSERT-EXEC调用some_other_sp,   你会收到一条错误信息。从而,   你只能有一个INSERT-EXEC   一次活跃。这是一个   SQL Server中的限制。

您需要找到其他方式。 Erland的文章链接了几乎所有的选项,并详细讨论了它们。

答案 2 :(得分:1)

将结果从另一个sp中获取的一种语法是:

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

但是你必须首先创建它插入的表,并且字段名称和类型必须完全匹配。