在视图中执行存储过程?

时间:2009-04-28 07:57:54

标签: sql tsql stored-procedures

是否可以在视图中执行存储过程?

即。

创建视图[dbo]。[v_ReportInvoiceClientsThisMonth] 如 EXEC [dbo]。[GetInvoiceClients] @startDate ='2009-03-01',@ endDate ='2009-04-01'

(不起作用)

我需要这个的原因是我需要一种方法来访问Excel中的SP(以一种安全的方式,即没有VBA)。

1 个答案:

答案 0 :(得分:3)

您可以通过表值函数的视图来执行此操作。这看起来像:

-- === Table-Valued function ====================================
--
create function fn_foo (
       @Date datetime

) returns @ResultSet table (
        DateKey           datetime
       ,DisplayDate       varchar (20)
) as
    insert @ResultSet (
           DateKey
          ,DisplayDate
    )
    select DateKey      -- Just pretend there's something to select
          ,DisplayDate  -- behind the scenes
      from ods.Dates
     where DateKey <= @Date
    return
go


-- === View ============================================
-- 
create view vw_foo (
       DateKey
      ,DisplayDate
) as
select DateKey
      ,DisplayDate
  from fn_foo ('2009-04-31')
go

有几点需要注意:

  • 使用功能可以做些什么限制。特别是存储过程代码和函数代码之间存在阻抗不匹配的情况,因此您通常不能使用函数来包装存储过程以执行此类操作。

  • 第一点意味着您可能需要将存储过程重新强制转换为表值函数。