从存储过程中获取结果集

3

我有一个存储过程A,其中包含一个存储过程B。

存储过程B执行插入操作并返回一行信息。

在存储过程A中是否有一种方法可以访问该信息?

3个回答

2

您可以执行存储过程并将其选择到临时表中。

Create #table ()....

INSERT INTO #table EXEC your_procedure

唯一真正困难的时候(也许是不可能的,我从未见过有人做到),就是当存储过程返回多个记录集(而不是多个记录),且这些记录集具有不同的字段时。

编辑: 您还可以使用表变量(DECLARE @my_table TABLE())来完成相同的操作。在您的情况下,您需要尝试两种方法并查看哪种更好。

http://www.sql-server-performance.com/2007/temp-tables-vs-variables/


我有一个建议,我们不应该建议OP在这里使用临时表,因为根据OP的说法,只有一行需要获取。如有错误,请谅解。 - Pankaj
我同意,但为了概括答案,我们应该展示可以使用临时表的可能性。他的需求(或其他人的需求)可能会发生变化,从而返回多行而不是一行。 - kemiller2002
是的,同意。但是OP目前的需求是只获取一行。如果有多行,我会建议使用临时表。谢谢。 - Pankaj

1
你可以创建一个临时表,然后从内部存储过程调用中插入执行。 共享数据 向下滚动到插入-执行部分。

根据 OP 的情况,应该避免使用表格 table,因为只有一行将被获取,所以我认为应该使用表格变量。请纠正我,如有错误请谅解。 - Pankaj
这个问题被标记为sql-server。只有在使用SQL2005或更新版本时,您才能将insert-exec插入到表变量中。在所有版本的SQL中,使用临时表都可以工作。此外,由于只有一行,临时表和表变量之间的性能(和内存)差异将是微不足道的。 - George Mastros

0
我建议您创建一个表变量,并将行信息插入其中。
编辑:
请注意,如果不在事务中使用且不与其他表连接,只是作为包含行信息的中间变量,那么它会非常有用,就像您在查询中所说的一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接