Лоша новина:няма начин. Добра новина:нямате нужда от нея (тъй като така или иначе няма да помогне).
Сблъсквал съм се с подобен проблем в един от моите проекти. Моето разбиране е, че докато изгражда пълнотекстов индекс, 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 (или нещо подобно), където подобно поведение е ясно посочено. Но намерих официална статия, която разказва как да конвертирате кавички за заявки за търсене в пълен текст, което е [имплицитно] приведено в съответствие с описания по-горе алгоритъм.