Использование запроса в качестве параметра в скалярной функции - PullRequest
0 голосов
/ 29 октября 2019

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

  1. Я пытался определить параметр в начале как @data1 = select max(return_date) from My_table
  2. Я пытался вызвать запрос внутри функции, как select * from my_function(select max(return_date) from My_table).
--- Need the max date from #test table to plugin My_function
create table #test 
(
    id float
    ,return_date date    
);

insert into #test (id, return_date) values(1,'1/31/2019')
insert into #test (id, return_date) values(2,'2/28/2019')
insert into #test (id, return_date) values(3,'3/31/2019')
insert into #test (id, return_date) values(4,'4/30/2019')
insert into #test (id, return_date) values(5,'5/31/2019')
insert into #test (id, return_date) values(6,'5/31/2019')
insert into #test (id, return_date) values(7,'5/31/2019')
insert into #test (id, return_date) values(8,'4/30/2019')

Мне нужно все из моей функции, которая имеет один параметр даты @date1. Но @date1 должен принимать максимальную дату от #test. В этом случае 5/31/2019.

Я получаю неправильную синтаксическую ошибку для обеих попыток.

1 Ответ

1 голос
/ 29 октября 2019

Обе ваши попытки должны работать в принципе. Однако у вас есть несколько ошибок, которые необходимо исправить:

  1. Для скалярной функции вам нужно выбрать саму функцию, а не из функции. Вы выбираете только из табличных функций.
  2. Чтобы ссылаться на функцию в SQL Server, необходимо указать ее имя схемы, например, dbo.my_function
  3. Чтобы встроить запрос в качестве параметра функции, вам потребуются дополнительныескобки вокруг запроса.

Вариант 1 - получить значение в переменную

declare @data1 date;
select @data1 = max(return_date) from #test;

select dbo.my_function(@data1); 

Вариант 2 - вызвать функцию со встроенным запросом

select dbo.my_function((select max(return_date) from #test)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...