2010-08-09 21 views
23

我有一個基本的存儲過程,通過傳入參數@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 

回答

34

你必須做你的@Keyword參數一些預處理然後將其傳遞到SQL語句中。 SQL期望關鍵字搜索將由布爾邏輯分隔或用引號括起來。所以,如果你正在尋找的詞組,它必須用引號括起來:

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

如果你想搜索所有的話,那麼你就需要像

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

更多信息,請參閱T-SQL CONTAINS syntax,尤其要看示例部分。

作爲附加說明,請務必替換雙引號字符(用空格),以免混淆全文查詢。請參閱此問題以瞭解如何執行此操作的詳細信息:SQL Server Full Text Search Escape Characters?

+0

謝謝。不知道爲什麼我看到的MSDN文檔沒有這個簡單但非常常見的例子。 – MikeTeeVee 2013-02-18 23:34:24

+0

@Aaron如果使用MATCH而不是CONTAINS,這個AND運算符是否工作?因爲我沒有得到任何AND和MATCH條件的輸出 – Raj 2013-12-30 06:12:33

+0

我們如何搜索包含「?我們把雙倍」的短語?或者語法是什麼? – MonsterMMORPG 2017-03-22 00:03:02

相關問題