2009-04-28 9 views
1

Возможно ли выполнить хранимую процедуру в представлении?Выполнение хранимой процедуры в представлении?

I.e.

CREATE VIEW [DBO]. [V_ReportInvoiceClientsThisMonth] А.С. EXEC [DBO]. [GetInvoiceClients] @startDate = '2009-03-01', @endDate = '2009-04-01'

(не работает)

Причина, по которой я нуждаюсь в этом, заключается в том, что мне нужен способ получить доступ к SP в Excel (безопасным способом идиот, то есть без VBA).

+0

Смотрите похожий вопрос: http://stackoverflow.com/questions/728898/can-you-do-a-select-on-the-results-of-a-stored-procedure-in-t- sql –

+0

http://stackoverflow.com/questions/916784/how-to-call-stored-procedure-in-a-view –

ответ

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 

Есть несколько предостережений:

  • Есть некоторые ограничения на то, что вы можете сделать с функциями. В частности, существует некоторая несогласованность импеданса между кодом хранимой процедуры и функциональным кодом, поэтому вы, как правило, не можете использовать функцию для обертывания хранимой процедуры для целей такого рода вещей.

  • Первый пункт означает, что вам, вероятно, придется перепрограммировать хранимую процедуру как функцию, учитываемую таблицей.

+0

Необходимо быть осторожным с TVF, так как они не хранят статистику ... –

Смежные вопросы