2010-08-09 6 views
23

J'ai une procédure stockée de base qui effectue une recherche de texte intégral sur 3 colonnes dans un tableau en transmettant un paramètre @Keyword. Cela fonctionne bien avec un mot mais tombe quand j'essaye de passer plus d'un mot. Je ne suis pas sûr pourquoi. L'erreur dit:Utilisation de plusieurs mots dans la chaîne d'entrée FullText Search

Erreur de syntaxe près de « élément de recherche » dans la recherche en texte intégral condition « 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 

Répondre

34

Vous devrez faire un peu de pré-traitement sur votre paramètre @Keyword avant de le transmettre dans l'instruction SQL. SQL s'attend à ce que les recherches par mot clé soient séparées par une logique booléenne ou entourées de guillemets. Donc, si vous êtes à la recherche de l'expression, il devra être entre guillemets:

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

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

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

Pour en savoir plus informations, voir le T-SQL CONTAINS syntax, en regardant en particulier à la section exemples.

En guise de note supplémentaire, veillez à remplacer le caractère de guillemets doubles (avec un espace) afin de ne pas mettre en erreur votre requête de texte intégral. Voir cette question pour les détails sur la façon de faire cela: SQL Server Full Text Search Escape Characters?

+0

Merci. Je ne sais pas pourquoi la documentation MSDN que j'ai consultée n'avait pas cet exemple simple mais extrêmement commun. – MikeTeeVee

+0

@Aaron Est-ce que cet opérateur AND fonctionne si MATCH au lieu de CONTAINS? Parce que je ne reçois aucune sortie pour ET avec la condition MATCH – Raj

+0

Comment pouvons-nous rechercher des phrases qui contient "? Do we put double" "ou quelle est la syntaxe? – MonsterMMORPG