Выполнить хранимую процедуру в представлении? - PullRequest
1 голос
/ 28 апреля 2009

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

т.е.

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

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

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

1 Ответ

3 голосов
/ 28 апреля 2009

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

-- === 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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...