FnSplit не работает для хранимой процедуры SQL, чтобы принять несколько параметров - PullRequest
0 голосов
/ 24 мая 2018

У меня есть хранимая процедура, которая в настоящее время принимает одно значение (ChainId) для параметра.Я пытаюсь позволить пользователю выбрать несколько значений (ChainId).Мое утверждение где ниже.Может ли кто-нибудь помочь направить меня в лучшем направлении, чем я сейчас.В настоящее время запрос будет выполняться и не будет возвращать данные, если я выберу несколько значений для параметра.

WHERE EndAuth is null AND CL.CHIND in(
SELECT [Value] FROM dbo.FnSplit(@ChainId, ','))
ORDER BY CL.CHIND 

1 Ответ

0 голосов
/ 19 июня 2018

Это популярная функция в SQL Server, поэтому я предполагаю, что вы работаете с этим.Убедитесь, что ваш параметр имеет тип Varchar (MAX).@ChainId передается как ваша строка (в идеале для SSRS), а ',' передается как ваш разделитель.В SSRS, если у вас есть текстовое поле для ввода пользователями нескольких значений вручную, они будут вводить что-то вроде «значение1, значение2, значение3».

Проверьте это:

Declare @Yes_No Varchar(Max)
Set @Yes_No = 'y,n'
Select @yes_no
Select * from SplitString('y,n',',')
Select * from SplitString(@Yes_No,',')

Ваши результаты будут

y,n
----
y
n
----
y
n

Почему я говорю использовать Varchar (Max), а не int, или Varchar (10)например, потому что это остановит функцию от преждевременного чтения всех значений.

Попробуйте это:

Declare @Yes_No Varchar(1)
Set @Yes_No = 'y,n'
Select * from SplitString(@Yes_No,',')

Результат будет:

y

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

Именно так SSRS принимает параметры.FN_Split не обязательно является встроенной функцией, но широко популярной и предназначена для передачи нескольких значений в строку с предварительно заданным разделителем.Поэтому убедитесь, что вы также перейдете к своему параметру в отчете и укажите, что он будет иметь несколько значений.Вы также можете предоставить список потенциальных значений для ваших пользователей на выбор.Вы можете сделать это, вручную заполнив небольшой список или предоставив другой источник данных в виде хранимой процедуры или таблицы.

...