2009-11-12 2 views
0

из моей C# -программы я обращаюсь к базе данных SQL Server 2008. У меня есть таблица с fulltextindex и хочу найти индексированную запись:с использованием параметра в SQL с ключевым словом LIKE

SELECT page_id FROM page_categories WHERE page_title LIKE @title 

Когда «названия» не имеет withespaces все нормально, но когда название действительно содержит withespaces, запрос не выполняется. Он не проливает ошибку, но возвращенная записей закрыт

command.ChangeParameter("title", title); 

using (System.Data.IDataReader reader = command.ExecuteQuery()) 
{ 
    while (reader.Read()) 
    resultSet.Add(reader.GetInt32(0)); 

    reader.Close(); 
} 

Я не могу заключить @title параметр с «», потому что тогда команда-объект будет интерпретировать @title в виде строки, а не параметр.

SELECT page_id FROM page_categories WHERE page_title LIKE '@title' 

Каждый знает, как я могу использовать параметр для LIKE запроса, когда титульный параметр может содержать пробелы?

Спасибо заранее, Frank

ответ

2

Вы можете сделать это:

SELECT page_id 
FROM page_categories 
WHERE page_title LIKE '%' + @title + '%' 
+0

Я хочу соответствовать точной строке. Предположим, у меня есть «инструмент» и «инструментальные песни» в моей базе данных. Когда я ищу с заголовком = «инструмент», я хочу получить ТОЛЬКО строку со значением «инструмент», а не «инструментальные песни». Но это было бы так, когда я использую подстановочные знаки ... – Aaginor

+0

Тогда вы должны быть в состоянии сделать, где page_title = @title. Возможно, вам нужно предоставить лучшие примеры ... – cjk

+0

Что я хочу сделать, это относительно просто: у меня есть таблица с nvarchar-строкой и id. Я хочу получить id (ы) - я не могу быть уверен, что nvarchar уникален - для данной строки. – Aaginor

2

в качестве альтернативы ответа ск, вы можете сделать это:

command.ChangeParameter("title", "%"+title.Trim()+"%"); 
1

Вы не можете использовать LIKE для поиска индекса freetext. Вы используете CONTAINS или FREETEXT или аналогичные.

+0

А, спасибо. Но моя проблема остается прежней: SELECT page_id FROM page_categories WHERE CONTAINS (page_title, @title) не будет работать, когда значение заголовка содержит withespaces. Он выдает синтаксическую ошибку. – Aaginor

1
SELECT page_id 
FROM page_categories 
WHERE page_title LIKE '%' + @title + '%' 

% представляет собой дикий символ, похожий на более общий * вне SQL (любая строка из нуля или более символов).

Вы должны убедиться, что в вызывающем коде параметр обрезается с помощью .Trim().

Here - полная ссылка на возможные дичь.

0

добавить одинарные кавычки в запросе:

SELECT page_id FROM page_categories WHERE page_title LIKE '' + @title + '' 

Если я пытаюсь это с 'Содержит' (СОДЕРЖИТ (PAGE_TITLE, '' + @tile + '')), я получаю ошибку синтаксиса.

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