Lixoradka
@Lixoradka
.Net разработчик

Почему функция, возвращающая табличное значение, не работает внутри хранимой процедуры?

Я работаю с MS SQL 2008 R2 сервером, если это важно

У меня есть хранимая процедура, которая строит большой отчет.
Для того, чтобы сформировать некоторые данные, мне приходится выполнять один и тот же запрос с разными датами и возвращать таблицу (идентификатор : значение), потом я связываю эти значения и считаю поле.

Логично было изолировать повторно используемый код. Это я и сделал. Я поместил его в функцию, возвращающую табличное значение. После этого я делаю 12 запросов к этой функции и объединяю возвращаемое значение по идентификатору.

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

Для примера вот так выглядит функция:
CREATE FUNCTION dbo.fGetMonthRatio
(
    @ReportDate DATE
)

RETURNS @RetTable TABLE
(
    id INT
    ,ratio FLOAT
)

AS
BEGIN
    INSERT @RetTable
        SELECT
            id,
            ratio
        FROM
            ...
            много кода с JOIN и прочими штуками
            ...
    RETURN
END


А вот так выглядит процедура:
ALTER PROCEDURE dbo.pTestProcedure
    @ReportDate DATE
AS
BEGIN
    SELECT * FROM dbo.fGetMonthRatio(DATEADD(MONTH, -6, @ReportDate))
END


Когда вызываю процедуру, запрос вешается.
В чем причина?

P.S.: На грамматические ошибки, если они есть - обращать внимание не стоит. Перепечатывал с монитора, так как нет прямого доступа в интернет + все имена изменял
  • Вопрос задан
  • 3312 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы