在FullText搜索输入字符串中使用多个单词

Dko*_*ong 26 t-sql full-text-search sql-server-2008

我有基本的存储过程,通过传入@Keyword参数对表中的3列执行全文搜索.它只用一个单词就可以正常工作,但是当我尝试传入多个单词时它就会失效.我不知道为什么.错误说:

全文搜索条件中"搜索项目"附近的语法错误'这是搜索项'

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
Run Code Online (Sandbox Code Playgroud)

Aar*_*n D 43

在将@Keyword参数传递给SQL语句之前,您必须对其进行一些预处理.SQL期望关键字搜索将由布尔逻辑分隔或用引号括起来.因此,如果您要搜索该短语,则必须使用引号:

SET @Keyword = '"this is a search item"'
Run Code Online (Sandbox Code Playgroud)

如果你想搜索所有单词,那么你需要类似的东西

SET @Keyword = '"this" AND "is" AND "a" AND "search" AND "item"'
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅T-SQL CONTAINS语法,特别是在Examples部分.

另外请注意,请务必替换双引号字符(带空格),这样就不会弄乱全文查询.有关如何执行此操作的详细信息,请参阅此问题:SQL Server全文搜索转义字符?