是否可以在另一个存储过程中使用一个存储过程的结果?
即
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。
答案 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.
但是你必须首先创建它插入的表,并且字段名称和类型必须完全匹配。