【问题标题】:Executing stored procedure in select query在选择查询中执行存储过程
【发布时间】:2013-03-12 14:23:54
【问题描述】:

我正在使用 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 

我真正要问的是如何在选择查询中包含dbo.QtySoldPerMonth 存储过程的执行?另外,存储过程的参数是:@custNo = a.custnmbr, @itemNo = b.itemnmbr 和@year = @year。

任何关于如何重写查询以执行 sp 的帮助将不胜感激。

【问题讨论】:

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


【解决方案1】:
  1. 为 sp 输出创建临时表
  2. 将存储过程执行到临时表中
  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...)
    

【讨论】:

    【解决方案2】:

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

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

    编辑

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-01-08
        • 2015-02-15
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 2019-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多