2012-08-22 40 views
2

我有一个存储过程SP1,它使用SELECT语句返回两个表T1和T2。我想在另一个存储过程SP2中对T2执行一些操作。有人可以指导我如何做到这一点?从SQL Server获取最后一个表存储过程

+0

我不认为你可以用SP做到这一点,你需要的是一个表值函数。 – yogi

+2

没有办法从TSQL中的存储过程访问第二个结果集。 如果两个结果集都是联合兼容的,那么你可以'INSERT INTO @T EXEC YourProc',但是这会插入**两个**结果集。 –

回答

2

选项1

变化SP1保存T2到一个表中,除了使用SELECT返回它。然后使用该表作为SP2的输入。

选项2

如果你无法改变SP1,你可以捕捉的存储过程在一个表中的输出。在StackOverflow上查看如何使用OPENROWSET或通过预先定义临时表来执行此问题:How to SELECT * INTO [temp table] FROM [stored procedure]

如果T1和T2没有相同的定义,则此选项将不起作用。如果他们有相同的定义,你可以导入这两个结果集为一个表如下:

--create a temporary table with the same definition as T1 and T2 
CREATE TABLE #temp (
    Col1 SOME DATATYPE, 
    Col2 SOME DATATYPE 
); 

--fill your temp table with the result sets of T1 and T2 
INSERT INTO #temp 
EXEC [dbo].[SP1]; 

但你必须处理T1-T2 Plus的表,而不是T2。

所以看来选项1是你最好的选择。

+1

其实我试图用选项2来实现它。但是谢谢你告诉选项1.非常感谢。 –

+0

不客气!我可以想象你想要选择2路由,必须说我有点惊讶,似乎没有明显的方式来处理来自SQL Server中的SP的多个结果集。 – Josien