是否可以在视图中执行存储过程?
即。
创建视图[dbo]。[v_ReportInvoiceClientsThisMonth] 如 EXEC [dbo]。[GetInvoiceClients] @startDate ='2009-03-01',@ endDate ='2009-04-01'
(不起作用)
我需要这个的原因是我需要一种方法来访问Excel中的SP(以一种安全的方式,即没有VBA)。
答案 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
有几点需要注意:
使用功能可以做些什么限制。特别是存储过程代码和函数代码之间存在阻抗不匹配的情况,因此您通常不能使用函数来包装存储过程以执行此类操作。
第一点意味着您可能需要将存储过程重新强制转换为表值函数。