2012-06-29 95 views

回答

0

为此,您可以创建SP2里面一个临时表,并在SP1中使用它

+0

确定吗?我想如果它是在SP2 *(内部SP)中创建的*,那么它的范围限制在SP2的持续时间内。这意味着在执行返回到SP1 *(外部SP)*时它不再存在。那么,临时表需要在SP1中创建? – MatBailie

+0

你可以创建一个临时表,但是没有任何#TempTable,通常可以创建临时表,并且在你使用它之后你将它放下 – Rednaxel

+0

然后它不是临时表。 '@ table' =表变量。 '#table' =临时表。 'table' =表。如果你的意思是一张桌子,在使用后你会掉落,不要把它叫做临时桌子,这意味着别的东西。此外,这样做有一个主要问题:如果两个单独的会话执行相同的SP,则表不能创建两次。 – MatBailie

4

可以使用INSERT INTO <table> EXEC <sp>一个结果集。

但是这不适用于多个结果集。

而且你不能嵌套它。 (调用SP1时,SP2可以使用它。但SP3不能做同样的事情,如果它调用SP2)。


如果你真的有多个结果集返回,您需要插入结果导入表格。然后外层SP可以使用这些表。

如果外部SP创建临时表(CREATE TABLE #temp),那么内部SP可以看到它插入一个临时表。

同样,你可以使用一个永久表。我建议有一个名为SPID的列,并使用@@ spid作为您插入其中的值。 (@@ spid唯一识别每个会话。)但是,您必须记住在插入表格后进行清理。


所有这些选项假设你可以修改两个SP。如果你不能,我不确定你可以在SQL Server中执行此操作。

+2

“但是这对多个结果集不起作用。”:实际上,它*将*适用于多个结果集,但只有它们具有兼容的列定义(即,它们可以被联合在一起,它们才会有效)。 – RBarryYoung

相关问题