web-dev-qa-db-ja.com

全文検索の入力文字列で複数の単語を使用する

@Keywordパラメータを渡して、テーブルの3つの列に対して全文検索を実行する基本的なストアドプロシージャがあります。 1つのWordで問題なく動作しますが、複数のWordを渡そうとするとフォールオーバーします。理由はわかりません。エラーは言う:

全文検索条件「これは検索項目です」の「検索項目」付近の構文エラー

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

@KeywordパラメーターをSQLステートメントに渡す前に、いくつかの前処理を行う必要があります。 SQLは、キーワード検索がブール論理で区切られるか、引用符で囲まれることを期待しています。したがって、フレーズを検索する場合は、引用符で囲む必要があります。

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

すべての単語を検索する場合は、次のようなものが必要になります

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

詳細については、 T-SQL CONTAINS構文 を参照してください。特にセクションを参照してください。

追加の注意事項として、二重引用符文字を(スペースで)置き換えて、フルテキストクエリを混乱させないようにしてください。その方法の詳細については、この質問を参照してください。 SQL Server全文検索のエスケープ文字?

41
Aaron D