2015-12-10 2 views
0

У меня есть параметр с несколькими значениями.Поиск текста для параметра с несколькими значениями в SQL Server с содержит

Я хочу выполнить то же самое, что и запрос 1, используя полнотекстовый поиск.

Запрос 1:

Declare @Class nvarchar(32) 

select * 
from Products p 
where p.Class in (@Class) 

Теперь я хочу, чтобы использовать полнотекстовый поиск, используя содержат:

Запрос 2

Declare @Class nvarchar(32) 

select * 
from Products p 
where contains(Class, @Class) 

Этот запрос отлично работает, если пользователь выберите только одно значение для @Class.

Если пользователь выбирает больше значений, он не работает.

Любая идея, как это можно достичь?

+0

В зависимости от того, сколько параметров, которые вы хотите поддержать вы можете использовать sproc, который принимает параметры и по умолчанию их имеет значение null, или вы можете использовать динамический запрос, который будет поддерживать столько, сколько вы хотите, но вам нужно использовать проверку данных в своем приложении, поскольку динамический sql позволяет SQL-инъекцию. –

ответ

0

Предполагая, что ваш @Class переменного, разделенные запятые (например: one,two,three), вы можете преобразовать его в булев синтаксис (например: '"one" OR "two" OR "three"') следующим образом:

declare @ClassBooleanStr nvarchar(max) 
set @ClassBooleanStr = '"' + Replace(@Class, ',', '" OR "') + '"' 

select * 
from Products p 
where contains(Class, @ClassBooleanStr) 
+0

Очень интересное решение. Фактически я создаю отчет в SSRS, а мой параметр @Class определен в SSRS как параметр ** Allow Multiple values ​​**. Это означает, что он предлагает пользователю список всех классов с флажками. –

+0

Поэтому @Class не является фактическим значением с разделителями-запятыми –

+0

Однако я собираюсь попробовать ваше решение. Возможно, в фоновом режиме SSRS multi select переведено в запятую. –

Смежные вопросы