Cattive notizie:non c'è modo. Buone notizie:non ne hai bisogno (perché non servirà comunque).
Ho affrontato un problema simile su uno dei miei progetti. La mia comprensione è che durante la creazione di un indice full-text, SQL Server tratta tutti i caratteri speciali come delimitatori di parole e quindi:
- La tua parola con un tale carattere è rappresentata come due (o più) parole nell'indice full-text.
- Questi caratteri vengono rimossi e non vengono visualizzati in un indice.
Si consideri che abbiamo la seguente tabella con un corrispondente indice full-text (che viene saltato):
CREATE TABLE [dbo].[ActicleTable]
(
[Id] int identity(1,1) not null primary key,
[ActicleBody] varchar(max) not null
);
Considera in seguito di aggiungere righe alla tabella:
INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')
Prova a cercare:
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')
Il primo gruppo di condizioni corrisponderà alla prima riga (e non alla seconda) mentre il secondo gruppo corrisponderà solo alla seconda riga.
Sfortunatamente non sono riuscito a trovare un collegamento a MSDN (o qualcosa del genere) in cui tale comportamento sia chiaramente indicato. Ma ho trovato un articolo ufficiale che spiega come convertire le virgolette per le query di ricerca full-text, che è [implicitamente] allineato con l'algoritmo sopra descritto.