Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры / 6 сообщений из 6, страница 1 из 1
04.09.2014, 16:31
    #38737773
Bandicoot_NSK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
Здравствуйте. Стоит MS SQL 2008 R2
Есть функция, возвращающая табличное значение
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE FUNCTION dbo.fGetMonthRatio
(
    @ReportDate DATE
)

RETURNS @RetTable TABLE
(
    id INT
    ,ratio FLOAT
)

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



Эту функцию я вызываю из хранимой процедуры:
Код: sql
1.
2.
3.
4.
5.
6.
ALTER PROCEDURE dbo.pTestProcedure
    @ReportDate DATE
AS
BEGIN
    SELECT * FROM dbo.fGetMonthRatio(DATEADD(MONTH, -6, @ReportDate))
END



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

Нашел точную причину, из-за чего запрос зависает:
Когда я вызываю функцию из запроса, я передаю ей параметр @ReportDate, перед этим вызывая над ним функцию DATEADD.
Код: sql
1.
SELECT * FROM dbo.fGetMonthRatio(DATEADD(MONTH, -6, @ReportDate))


Если вместо @ReportDate написать например '2014-08-01', функция отлично работает. Когда вместо литерала в функцию подается переменная - все ломается.

Помогите пожалуйста исправить
...
Рейтинг: 0 / 0
04.09.2014, 16:38
    #38737782
Bandicoot_NSK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
Поправка. Проблему я решил, объявив еще одну переменную и присваивая ей значение @ReportDate при создании
Код: sql
1.
2.
DECLARE
    @TempDate DATE = @ReportDate



Однако вопрос остается. Почему я не могу передавать в функцию переменную, которую передал в процедуру?
...
Рейтинг: 0 / 0
04.09.2014, 16:41
    #38737787
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
Bandicoot_NSK,

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

Только литеральные константы, переменные и поля таблиц (в APPLY).
В скалярную функцию можно передать поле и без APPLY.
...
Рейтинг: 0 / 0
04.09.2014, 16:42
    #38737788
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
...
Рейтинг: 0 / 0
04.09.2014, 16:44
    #38737791
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
Bandicoot_NSKЕсли вместо @ReportDate написать например '2014-08-01', функция отлично работает.А вообще, я тоже кое в чём бывает ошибаюсь...
...
Рейтинг: 0 / 0
05.09.2014, 07:46
    #38738124
Bandicoot_NSK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
Shakill,

большое спасибо за статью! Очень полезная, я про опции даже и не знал.
В такие моменты понимаешь, что теоретической подготовки прям не хватает
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]