2009-04-28 162 views
1

是否有可能在一个视图来执行存储过程?在视图中执行存储过程?

I.e.

CREATE VIEW [DBO]。[v_ReportInvoiceClientsThisMonth] AS EXEC [DBO]。[GetInvoiceClients] @startDate = '2009-03-01',@EndDate = '2009-04-01'

(不工作)

我之所以需要这个是我需要一种方法来访问Excel中的SP(在一个白痴安全的方式,即不VBA)。

+0

查看同类问题:http://stackoverflow.com/questions/728898/can-you-do-a-select-on-the-results-of-a-stored-procedure-in-t- SQL – 2009-04-28 08:11:07

+0

http://stackoverflow.com/questions/916784/how-to-call-stored-procedure-in-a-view – 2012-09-20 16:11:16

回答

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 

有几个注意事项:

  • 有一些限制,你可以用函数做什么。尤其是,存在存储过程的代码和功能代码,所以你通常不能使用的功能围绕一个存储过程包做这样的事情的目的之间的阻抗失配的东西。

  • 第一点意味着你可能要重新投你的存储过程作为一个表值函数。