powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
6 сообщений из 6, страница 1 из 1
Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
    #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
Проблема с вызовом функции возвращающей табличное значение из хранимой процедуры
    #38737782
Bandicoot_NSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка. Проблему я решил, объявив еще одну переменную и присваивая ей значение @ReportDate при создании
Код: sql
1.
2.
DECLARE
    @TempDate DATE = @ReportDate



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

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

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

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


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