Я работаю с 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.: На грамматические ошибки, если они есть - обращать внимание не стоит. Перепечатывал с монитора, так как нет прямого доступа в интернет + все имена изменял