Назначение многозначного параметра (значений) локальному параметру в sql-запросе

У меня есть ситуация, когда мне нужно сохранить параметр с несколькими значениями в локальный параметр в запросе sql. В построителе отчетов SSRS я создал два многозначных параметра @Customer и @LogisticsGroup. И в моем SQL-запросе я должен присвоить эти значения локальным параметрам примерно так.

DECLARE @Acct NVARCHAR(100) , @LgstGroup NVARCHAR(MAX)
SELECT @Acct = (@Customer) 
,@LgstGroup = (@LogisticsGroup)

Но с таким подходом я могу выбрать только одно значение, если я выберу два значения, запрос завершится ошибкой.

Я пробовал это, но это похоже на неправильный синтаксис.

DECLARE @Acct NVARCHAR(100) , @LgstGroup NVARCHAR(MAX)
SELECT @Acct IN (@Customer) 
,@LgstGroup IN (@LogisticsGroup)

Пожалуйста, помогите решить эту проблему. Спасибо большое


person Santhosh Reddy    schedule 06.07.2020    source источник


Ответы (1)


В параметре можно хранить значения с разделителями. Так, например, @Customer может содержать строку идентификаторов, например 1,2,3. Отчет может объединить несколько значений в этот формат с помощью функции Join.

Теперь в SQL один из вариантов — использовать оператор LIKE для поиска строки. Вы можете написать что-то вроде:

@Customer like '%,' + Column_Name + ',%'

Однако этот подход неэффективен, и вы должны быть осторожны с частичными совпадениями значений.

Лучшим подходом является создание определяемой пользователем функции с табличным значением, которая может разделять значения и обрабатывать их как таблицу. Там много примеров, это довольно простая функция. Тогда на практике это будет выглядеть так:

WHERE Column_Name in (select * from Split(@Customer))

OR

INNER JOIN Split(@Customer) ON...
person StevenWhite    schedule 06.07.2020
comment
Спасибо @Steven, это помогло. Я использовал функцию JOIN в построителе отчетов и использовал функцию SplitString. еще раз спасибо. - person Santhosh Reddy; 08.07.2020