web-dev-qa-db-fra.com

Utilisez plusieurs mots dans la chaîne d'entrée de la recherche FullText Recherche

J'ai une procédure stockée de base qui effectue une recherche de texte complète contre 3 colonnes dans une table en passant dans un @Keyword Paramètre. Cela fonctionne bien avec un mot mais tombe dessus quand j'essaie de passer plus d'un mot. Je ne sais pas pourquoi. L'erreur dit:

Erreur de syntaxe près de "élément de recherche" dans la condition de recherche en texte intégral 'Ceci est un élément de recherche'

SELECT     S.[SeriesID], 
           S.[Name] as 'SeriesName',
           P.[PackageID],
           P.[Name]     
FROM       [Series] S
INNER JOIN [PackageSeries] PS ON S.[SeriesID] = PS.[PackageID]
INNER JOIN [Package]       P  ON PS.[PackageID] = P.[PackageID]
WHERE CONTAINS ((S.[Name],S.[Description], S.[Keywords]),@Keywords)
AND   (S.[IsActive] = 1) AND (P.[IsActive] = 1) 
ORDER BY [Name] ASC
26
Dkong

Vous devrez faire du pré-traitement sur votre paramètre @keyword avant de le transmettre à l'instruction SQL. SQL s'attend à ce que les recherches de mots-clés soient séparées par une logique booléenne ou entouré de citations. Donc, si vous recherchez la phrase, il devra être dans les devis:

SET @Keyword = '"this is a search item"'

Si vous voulez rechercher tous les mots, vous aurez besoin de quelque chose comme

SET @Keyword = '"this" AND "is" AND "a" AND "search" AND "item"'

Pour plus d'informations, voir la section T-SQL contient la syntaxe , en regardant en particulier les exemples .

À titre de note supplémentaire, assurez-vous de remplacer le caractère de double citation (avec un espace) afin de ne pas gâcher votre requête en texte intégral. Voir cette question pour plus de détails sur la façon de faire cela: SQL Server Texte complet de la recherche de caractères d'échappement?

41
Aaron D