从存储过程的结果集中选择列

我有一个存储过程返回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/

    链接地址: http://www.djcxy.com/p/24741.html

    上一篇: Select columns from result set of stored procedure

    下一篇: Retrieve column names and types of a stored procedure?