Utilisez plusieurs mots dans la chaîne de saisie de recherche FullText

j'ai stocké la procédure de base qui effectue une recherche en texte intégral contre 3 colonnes dans un tableau en passant dans un paramètre @Keyword . Il fonctionne très bien avec un mot, mais tombe quand j'essaie de passer dans plus d'un mot. Je ne sais pas pourquoi. L'erreur dit:

erreur de Syntaxe près de 'élément de recherche" dans le texte intégral de la condition de recherche "c'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
24
demandé sur Mahmoud Gamal 2010-08-09 19:51:27

1 réponses

vous devrez faire un pré-traitement sur votre paramètre @Keyword avant de le passer dans la déclaration SQL. SQL s'attend à ce que les recherches par mots-clés soient séparées par une logique booléenne ou entourées de guillemets. Donc, si vous cherchez la phrase, elle devra être entre guillemets:

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

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

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

pour plus d'informations, voir le T-SQL Contient la syntaxe , en regardant en particulier la section exemples .

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

36
répondu Aaron D 2017-05-23 12:25:26