是否可以在另一个存储过程(sp2)中调用存储过程(sp1),该存储过程返回多个表结果?调用一个存储过程,在另一个存储过程中返回多个表结果
我必须在执行的存储过程(sp2)中使用返回的结果。
据我所知,这是不可能的。但我想确认一下。
有没有其他办法来达到这种要求?
是否可以在另一个存储过程(sp2)中调用存储过程(sp1),该存储过程返回多个表结果?调用一个存储过程,在另一个存储过程中返回多个表结果
我必须在执行的存储过程(sp2)中使用返回的结果。
据我所知,这是不可能的。但我想确认一下。
有没有其他办法来达到这种要求?
为此,您可以创建SP2里面一个临时表,并在SP1中使用它
可以使用INSERT INTO <table> EXEC <sp>
为一个结果集。
但是这不适用于多个结果集。
而且你不能嵌套它。 (调用SP1时,SP2可以使用它。但SP3不能做同样的事情,如果它调用SP2)。
如果你真的有多个结果集返回,您需要插入结果导入表格。然后外层SP可以使用这些表。
如果外部SP创建临时表(CREATE TABLE #temp
),那么内部SP可以看到它插入一个临时表。
同样,你可以使用一个永久表。我建议有一个名为SPID的列,并使用@@ spid作为您插入其中的值。 (@@ spid唯一识别每个会话。)但是,您必须记住在插入表格后进行清理。
所有这些选项假设你可以修改两个SP。如果你不能,我不确定你可以在SQL Server中执行此操作。
“但是这对多个结果集不起作用。”:实际上,它*将*适用于多个结果集,但只有它们具有兼容的列定义(即,它们可以被联合在一起,它们才会有效)。 – RBarryYoung
确定吗?我想如果它是在SP2 *(内部SP)中创建的*,那么它的范围限制在SP2的持续时间内。这意味着在执行返回到SP1 *(外部SP)*时它不再存在。那么,临时表需要在SP1中创建? – MatBailie
你可以创建一个临时表,但是没有任何#TempTable,通常可以创建临时表,并且在你使用它之后你将它放下 – Rednaxel
然后它不是临时表。 '@ table' =表变量。 '#table' =临时表。 'table' =表。如果你的意思是一张桌子,在使用后你会掉落,不要把它叫做临时桌子,这意味着别的东西。此外,这样做有一个主要问题:如果两个单独的会话执行相同的SP,则表不能创建两次。 – MatBailie