Я использую SQL Server 2017, версия 14.0.2002.14
(Developer Edition (64-разрядная версия))
Я пытаюсь создать функцию, в которой пользователи могут передавать несколько значений для фильтрации запроса.
Обычно я могу сделать это с функциями, которые запрашивают только один параметр, используя шаблон ниже:
CREATE FUNCTION func_1
(
@StartDate date,
@EndDate date
)
RETURNS TABLE AS
RETURN
(
SELECT * FROM table_name
WHERE table_name.Date BETWEEN @StartDate and @EndDate
)
Пользователь сможет вернуть отфильтрованные результаты, выполнив:
SELECT * FROM func_1('20190101', '20191231')
При попытке вернуть результаты путем передачи нескольких значений этот запрос работает при выполнении на SQL Server:
-- Declare a TABLE variable to be used as a filter
DECLARE @Product TABLE
(
Products varchar(10)
)
INSERT INTO @Product VALUES('value_1', 'value_2')
-- Return filtered results from query
SELECT Date, Product, Quantity
FROM Table_Name
WHERE Table_Name.Product IS IN (SELECT Products FROM @Product)
Однако мне бы хотелосьчтобы создать его как функцию, которая не нравится SQL Server ...
CREATE FUNCTION func_2
(
@StartDate date,
@EndDate date,
@Product TABLE
(
Product varchar(10)
)
INSERT INTO @Product VALUES()
)
RETURNS TABLE AS
RETURN
(
SELECT Date, Product, Quantity
FROM Table_Name
WHERE Date BETWEEN @StartDate AND @EndDate
AND Table_Name.Product IS IN (SELECT Products FROM @Product)
)
Пользователь должен вызвать этот запрос и вернуть ему отфильтрованные результаты:
SELECT * FROM func_2('20190101', '20191231', ('value_1', 'value_2', 'value_3'))
Редактировать:Также добавлены аргументы даты в func_2, т.е. функция предназначена для фильтрации по более чем одному параметру