@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
@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全文検索のエスケープ文字?