在select查询中执行存储过程

时间:2013-03-22 16:25:10

标签: sql-server stored-procedures select-query

我正在使用SQL Server 2008 R2,并且我正在尝试运行查询,其中还将执行存储过程。

查询是:

select a.custnmbr, a.custname, a.salsterr, b.itemnmbr, b.itemdesc, d.slprsnid ,exec dbo.QtySoldPerMonth a.custnmbr, b.itemnmbr, @year 
from rm00101_temp a, iv00101_temp b 
inner join sop30300_RPT c on b.itemnmbr = c.itemnmbr
inner join sop30200_RPT d on c.sopnumbe = d.sopnumbe
where
b.itemnmbr like @houseCode + '%' and itmclscd like @classCode + '%'
AND DATEPART(year, d.docdate) = @year
group by a.custnmbr, a.custname, a.salsterr, b.itemnmbr, b.itemdesc, d.slprsnid
order by d.slprsnid, b.itemnmbr 

我真正想问的是如何在select查询中包含dbo.QtySoldPerMonth存储过程的执行?此外,存储过程的参数包括:@custNo = a.custnmbr, @itemNo = b.itemnmbr@year = @year

有关如何重写查询以执行sp的任何帮助都将受到赞赏。

3 个答案:

答案 0 :(得分:5)

  1. 为sp output创建临时表
  2. exec存储过程到临时表
  3. 将临时表连接到查询的其余部分

    create table #temp(yourCol1 int, your Col2 int...);
    
    insert #temp(yourCol1,yourCol1...)
    exec dbo.QtySoldPerMonth 
    
    select * from blah
        join #temp t on (blah.blah=t.id...)
    

答案 1 :(得分:1)

您无法将存储过程作为另一个查询的一部分执行。

查看是否可以使用UDF视图来表示SP将返回的相同结构。

修改

另一种选择:首先执行存储过程并在主查询中使用结果。

答案 2 :(得分:0)

您无法将SP结果合并到查询中,但可以将SP转储到表中。例: http://blog.sqlauthority.com/2009/09/23/sql-server-insert-values-of-stored-procedure-in-table-use-table-valued-function/ 但在你的情况下,它不是一个选项,因为你想要每个行的SP结果具有不同的参数;除非您修改SP,否则它将返回一个结果集,您可以在将其插入表后使用。