有两个存储过程 -p1和p2. 从包含一些内容的表类型表中p1返回数据,但只返回它返回的内容Table1table1_typep2p1
CREATE PROCEDURE dbo.p1
@Resp INT OUTPUT
AS
SET @Resp = 0;
SELECT * FROM Table1;
GO
CREATE PROCEDURE dbo.p2
@Resp INT OUTPUT
AS
DECLARE @tmp table1_type;
INSERT INTO @tmp EXEC dbo.p1 @Resp OUTPUT;
SELECT * FROM @tmp;
GO
如果您提出以下要求
DECLARE @tmp dbo.table1_type;
DECLARE @Resp INT;
INSERT INTO @tmp EXEC dbo.p1 @Resp OUTPUT;
SELECT * FROM @tmp;
那么表格的@tmp内容将出现在表格中Table1,变量@Resp将变为等于 0。但是如果您调用该过程dbo.p2,它将不返回任何内容(@tmp它将为空)并且变量@Resp将不等于任何内容。
DECLARE @tmp dbo.table1_type;
DECLARE @Resp INT;
INSERT INTO @tmp EXEC dbo.p2 @Resp OUTPUT;
SELECT * FROM @tmp;
为什么会发生这种情况,如何调用包含对另一个存储过程的调用的存储过程,以便它返回预期的内容?
INSERT INTO ... EXEC ...问题在于在嵌套过程中使用构造。此构造不能在嵌套过程中使用。因此,如果您绕过这一刻并返回数据,例如,通过OUTPUT参数,那么一切正常。在这里找到了答案http://www.t-sql.ru/post/An_INSERT_EXEC_statement_cannot_be_nested.aspx