Плохие новости: нет пути. Хорошая новость: вам это не нужно (так как в любом случае это не поможет).
Я столкнулся с похожей проблемой в одном из моих проектов. Насколько я понимаю, при создании полнотекстового индекса SQL Server обрабатывает все специальные символы как разделители слов и, следовательно,
- Ваше слово с таким символом представляется в виде двух (или более) слов в полнотекстовом индексе.
- Эти символы убраны и не отображаются в индексе.
Предположим, у нас есть следующая таблица с соответствующим полнотекстовым индексом для нее (которая пропускается):
CREATE TABLE [dbo].[ActicleTable]
(
[Id] int identity(1,1) not null primary key,
[ActicleBody] varchar(max) not null
);
Рассмотрим позже, мы добавим строки в таблицу:
INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')
Попробуйте поискать:
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')
и
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')
Первая группа условий будет соответствовать первой строке (а не второй), тогда как вторая группа будет соответствовать только второй строке.
К сожалению, я не смог найти ссылку на MSDN (или что-то еще), где такое поведение четко указано. Но я нашел официальную статью , в которой рассказывается, как преобразовывать кавычки для полнотекстовых поисковых запросов, которая [неявно] соответствует описанному выше алгоритму.