«Как» в SQL Server для поиска в (,) разделенных параметров в строке - PullRequest
0 голосов
/ 20 января 2012

Я работаю над проектом, и у меня висит запрос (проблема).

Я объявил строку ключей с (,), разделенных в SQL Server. Я хочу найти данные о базовых ключах в строке из некоторой таблицы, используя ключевое слово LIKE.

Как я могу это сделать?

Например

@SearchKey='Game,Movie,Raw'    

Вот некоторые ключи, которые я хочу найти в таблице, используя ключевое слово LIKE

Ответы [ 4 ]

4 голосов
/ 20 января 2012

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

Create Function [dbo].[MyFunction]
(
    @List NVarChar(Max)
)
Returns @IDList TABLE 
(
    ID int 
)
With SchemaBinding
As
Begin
    Declare @myList NVarChar(Max);
    Declare @value NvarChar(Max);

    SET @myList = @List;

    While(Charindex(',', @myList) != 0)
    Begin
        SET @value = Substring(@myList , 1, Charindex(',', @myList) - 1);
        Insert Into @IDList (ID) Values (@value)
        SET @myList = Substring(@myList, Charindex(',', @myList) + 1, Len(@myList));
    End

    Insert Into @IDList (ID) Values (@myList)

    Return;
End

И затем объединять таблицы.

3 голосов
/ 20 января 2012

Вам это помогает?Я бы не рекомендовал делать это (по соображениям производительности), хотя ..

 declare @keys varchar(max)
 set @keys = '1,200,123,44'

 select * from sometable where (',' + @keys + ',') like '%,' + sometable.key + ',%'
2 голосов
/ 20 января 2012

Если я правильно понимаю ваш вопрос, то вы, например, можете искать в значении AA,BG,FR,DE такой ключ, как BG или DE. Предполагая, что ваш список не имеет начальной или конечной запятой, тогда это должно работать в предложении WHERE:

WHERE ',' + ListOfKeys + ',' LIKE '%,' + KeyToFind + ',%'
0 голосов
/ 20 января 2012

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

Если данные, которые вы ищете, хранятся в списке, разделенном запятыми,тогда наилучшее из возможных решений - это исправить вашу модель данных и хранить данные в соответствующей таблице.

Если ваши данные представляют собой длинное поле типа varchar max, и вы ищете ключевые термины в документе, посмотрите, как выполнить полнотекстовый поиск.Это будет работать намного лучше, чем любое подобное утверждение.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...