2010-08-09 12 views
23

Ich habe grundlegende gespeicherte Prozedur, die eine Volltextsuche gegen 3 Spalten in einer Tabelle durch die Übergabe in einem @Keyword Parameter durchführt. Es funktioniert gut mit einem Wort, fällt aber um, wenn ich versuche, mehr als ein Wort einzugeben. Ich bin mir nicht sicher warum. Der Fehler sagt:Verwenden Sie mehrere Wörter in FullText Suche Eingabezeichenfolge

Syntaxfehler bei ‚Suchbegriff‘ in der Volltextsuchbedingung ‚ist dies ein Suchbegriff‘

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 

Antwort

34

Sie werden einige Vorbearbeitung auf Ihrem @Keyword Parameter zu tun haben, bevor Sie es in die SQL-Anweisung übergeben. SQL erwartet, dass Schlüsselwortsuchen durch boolesche Logik getrennt oder in Anführungszeichen eingeschlossen werden. Also, wenn Sie für die Phrase suchen, wird es in Anführungszeichen sein:

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

Wenn Sie für alle Wörter gesucht werden soll, dann werden Sie so etwas wie

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

Weitere brauchen Informationen finden Sie in der T-SQL CONTAINS syntax, insbesondere auf die Beispiele Abschnitt.

Als zusätzliche Anmerkung, ersetzen Sie das doppelte Anführungszeichen (mit einem Leerzeichen), damit Sie Ihre Volltextabfrage nicht durcheinander bringen. Siehe diese Frage für Details, wie man das macht: SQL Server Full Text Search Escape Characters?

+0

Danke. Ich bin mir nicht sicher, warum die MSDN-Dokumentation, die ich mir angesehen habe, nicht dieses einfache, aber sehr häufige Beispiel hatte. – MikeTeeVee

+0

@Aaron Funktioniert dieser AND-Operator, wenn MATCH anstelle von CONTAINS verwendet wird? Weil ich keine Ausgabe für AND mit MATCH-Bedingung bekomme – Raj

+0

Wie suchen wir nach Phrasen, die "? Do double" oder was ist die Syntax? – MonsterMMORPG

Verwandte Themen