Más notícias:não tem jeito. Boas notícias:você não precisa disso (já que não vai ajudar de qualquer maneira).
Eu enfrentei problema semelhante em um dos meus projetos. Meu entendimento é que, ao criar o índice de texto completo, o SQL Server trata todos os caracteres especiais como delimitadores de palavras e, portanto:
- Sua palavra com esse caractere é representada como duas (ou mais) palavras no índice de texto completo.
- Esses caracteres são removidos e não aparecem em um índice.
Considere que temos a seguinte tabela com um índice de texto completo correspondente (que é ignorado):
CREATE TABLE [dbo].[ActicleTable]
(
[Id] int identity(1,1) not null primary key,
[ActicleBody] varchar(max) not null
);
Considere mais tarde, adicionamos linhas à tabela:
INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')
Tente pesquisar:
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')
e
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')
O primeiro grupo de condições corresponderá à primeira linha (e não à segunda), enquanto o segundo grupo corresponderá apenas à segunda linha.
Infelizmente, não consegui encontrar um link para o MSDN (ou algo assim) onde tal comportamento seja claramente declarado. Mas encontrei um artigo oficial que diz como converter aspas para consultas de pesquisa de texto completo, que está [implicitamente] alinhado com o algoritmo descrito acima.