将存储过程结果转换为表格?

时间:2010-06-24 17:38:12

标签: sql sql-server sql-server-2008 casting

我目前有一个运行复杂查询并返回数据集的存储过程。如果可能的话,我想把这个数据集转换成一个表(我可以在其上执行进一步的查询)。我知道我可以使用表值UDF来做到这一点但我宁愿在这一点上避免这种情况。有什么方法可以完成这项任务吗?

编辑:好的...所以我正在使用的SProc(由第三方编写,我不应该更改它)运行一个相当复杂的select语句来返回一堆关于采购订单的行项目数据。我可以将其重新创建为UDF但是我必须支持UDF并确保在我们的供应商更改其SProc时它会发生变化。我想通过一系列标准进一步优化此订单项信息,例如(但不限于)商品编号,供应商代码,成本中心等。所有这些信息都由原始SProc带回来,我只是需要能够进一步操纵它。我的思维过程是,如果我能以某种方式将SProc的结果视为一个表(或者将它们变成某种类型的表格格式),那么我可以针对原始结果集运行进一步的查询以限制上述标准。如果需要进一步的细节,请告诉我。

4 个答案:

答案 0 :(得分:1)

在存储过程之间存在各种共享数据的方法 - this link is pretty exhaustive

但我很好奇为什么你需要一个表值存储过程(在SQL Server中不存在),当有表值函数时...

答案 1 :(得分:1)

  

将存储过程结果转换为   表

是的,经常使用。它只需要一个或多个select语句:

Create Procedure #Foo
As
Select object_id, name
From sys.columns

那就是说,你不能加入这个结果集,也不能轻易地从另一个存储过程中使用它(尽管有一种方法)。鉴于您的编辑,似乎问题是您是否可以使用另一个存储过程消耗存储过程的结果。从技术上讲,是的。您可以使用proc的结果填充临时表。但是,必须使用与存储过程的第一个结果集返回的列结构相同的列结构声明临时变量或临时表。

Declare @Data Table ( object_id int, name nvarchar(128) )

Insert @Data
Exec #Foo

Select *
From @Data

(或者使用Cade Roux和OMG Ponies提到的更聪明的OPENROWSET解决方案)

答案 2 :(得分:0)

您是否考虑过使用table-valued parameters?它们是SQL 2008中的新功能。

- 编辑 -

不,没关系,他们只是将数据传递到存储过程。

答案 3 :(得分:0)