从存储过程的结果集中选择列
我有一个存储过程返回80列和300行。 我想写一个选择获取那些列中的2个。 就像是
SELECT col1, col2 FROM EXEC MyStoredProc 'param1', 'param2'
当我使用上面的语法时,我得到错误:
“无效的列名称”。
我知道最简单的解决方案是更改存储过程,但我没有写入,而且我也无法更改它。
有什么办法可以做我想做的事吗?
我可以创建一个临时表来放置结果,但是因为有80列,所以我需要创建一个80列临时表才能获得2列。 我想避免追踪所有返回的列。
我尝试使用WITH SprocResults AS ....
按照Mark的建议,但我得到了2个错误
关键字'EXEC'附近的语法不正确。
')'附近语法不正确。
我试图声明一个表变量,我得到了以下错误
插入错误:提供的值的列名或数量与表定义不匹配
如果我尝试
SELECT * FROM EXEC MyStoredProc 'param1', 'param2'
我收到错误:
关键字'exec'附近的语法不正确。
你能分解查询吗? 将存储的proc结果插入表变量或临时表中。 然后,从表变量中选择2列。
Declare @tablevar table(col1 col1Type,..
insert into @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
SELECT col1, col2 FROM @tablevar
下面是一个很好的文档链接,解释了解决问题的所有不同方法(尽管由于无法修改现有存储过程,因此很多方法都无法使用)。
如何在存储过程之间共享数据
Gulzar的答案会起作用(它在上面的链接中有记录),但写起来很麻烦(你需要在你的@tablevar(col1,...)语句中指定所有80个列名,并且在将来如果一个列被添加到模式或者输出被改变了,它将需要在你的代码中被更新,否则它将会出错。
CREATE TABLE #Result
(
ID int, Name varchar(500), Revenue money
)
INSERT #Result EXEC RevenueByAdvertiser '1/1/10', '2/1/10'
SELECT * FROM #Result ORDER BY Name
DROP TABLE #Result
资源:
http://stevesmithblog.com/blog/select-from-a-stored-procedure/