FREETEXTTABLE (Transact-SQL)

更新: 2006 年 7 月 17 日

針對包含以字元為基礎之資料類型的資料行,傳回含有零個、一個或多個資料列的資料表,這些資料行的值符合指定的 freetext_string 中的文字意義,但字面不一定完全吻合。您可以依照正規資料表名稱的相同方式,在 SELECT 陳述式的 FROM 子句中參考 FREETEXTTABLE。

使用 FREETEXTTABLE 的查詢會指定自由文字形式的全文檢索查詢,每個資料列都會傳回一個相關次序值 (RANK) 和全文檢索索引鍵 (KEY)。

主題連結圖示Transact-SQL 語法慣例

語法

FREETEXTTABLE (table , { column_name | (column_list) | * } 
          , 'freetext_string' 
     [ ,LANGUAGE language_term ] 
     [ ,top_n_by_rank ] )

引數

  • table
    這是已標示全文檢索查詢的資料表名稱。tableview 可以是一段、兩段或三部分資料庫物件名稱。當查詢檢視時,只能包含一個全文檢索索引基底資料表。

    如需詳細資訊,請參閱<Transact-SQL 語法慣例 (Transact-SQL)>。

    table 不能指定伺服器名稱,也不能用在連結伺服器的查詢中。

  • column_name
    這是 table 中所要搜尋的資料行名稱。charvarcharncharnvarchartextntextimagexmlvarbinary(max) 等類型的資料行是全文檢索搜尋的有效資料行。
  • column_list
    指出您可以指定多個資料行,各資料行用逗號分隔。column_list 必須括在括號中。除非您指定了 language_term,否則,column_list 所有資料行的語言必須相同。
  • *
    指定登錄了全文檢索搜尋的所有資料行,都應該用來搜尋給定的 freetext_string。除非您指定了 language_term,否則,資料表中的所有全文檢索索引資料行的語言必須相同。
  • freetext_string
    這是 column_name 中所要搜尋的文字。您可以輸入任何文字,其中包括單字、片語或句子。在全文檢索索引中找到任何詞彙或任何詞彙的各種形式,都會產生相符項目。

    在 CONTAINS 搜尋條件中,AND 是關鍵字,但在 freetext_string 中,'and' 是個贅字,會被捨棄。

    這裡不允許使用 WEIGHT、FORMSOF、萬用字元、NEAR 和其他語法。freetext_string 利用同義字來斷詞、詞幹分析和判斷結果。如果用雙引號括住 freetext_string,就會改成比對片語;不會執行詞幹分析和同義字作業。

  • LANGUAGE language_term
    這是 FREETEXTTABLE 查詢利用其資源來斷詞、確立詞幹,以及移除同義字和贅字的語言。這個參數是選擇性的,可以指定成對應於語言地區設定識別碼 (LCID) 的字串、整數或十六進位值。如果指定了 language_term,就會將它代表的語言套用至搜尋條件的所有元素上。如果未指定任何值,就會使用資料行全文檢索語言。

    當指定為字串時,language_term 會對應至 syslanguages 系統資料表中的 alias 資料行值。字串必須以單引號括住,如 'language_term'。當指定為整數時,language_term 是用來識別語言的實際 LCID。當指定為十六進位值時,language_term 是 0x,後面接著 LCID 的十六進位值。十六進位值不能超出 8 位數,開頭的零也包括在內。

    如果這個值是雙位元組字元集 (DBCS) 格式,Microsoft SQL Server 會將它轉換成 Unicode。

    如果指定的語言無效,或尚未安裝對應於這個語言的資源,SQL Server 就會傳回錯誤。若要使用中性語言資源,請在 language_term 中指定 0x0。

  • top_n_by_rank
    當指定整數值 n 時,FREETEXTTABLE 只會依次序排序,傳回前 n 個相符項目。

    如果除了 FREETEXTTABLE 述詞,還另外進行篩選,就會將篩選套用在前 n 個資料列上,傳回的資料列數會低於 top_n_by_rank 個資料列。在 sp_configure 預存程序中啟用 precompute rank 選項,可以增加使用 top_n_by_rank 參數的 FREETEXTTABLE 查詢效能。如需詳細資訊,請參閱<sp_configure (Transact-SQL)>和<sp_fulltext_service (Transact-SQL)>。

備註

FREETEXTTABLE 使用與 FREETEXT 述詞相同的搜尋條件。

如同 CONTAINSTABLE,傳回的資料表會有名稱為 KEYRANK 的資料行,查詢會參考它們,以取得適當的資料列以及使用資料列次序值。

如果相容性層級低於 70,就不會將 FREETEXTTABLE 視為關鍵字。如需詳細資訊,請參閱<sp_dbcmptlevel (Transact-SQL)>。

權限

使用者必須具備指定的資料表或資料表中被參考的資料行之適當 SELECT 權限,才能叫用 FREETEXTTABLE。

範例

下列範例會傳回與 sweetcandybreaddrymeat 相關的所有類別目錄的類別目錄名稱和描述。

ms177652.note(zh-tw,SQL.90).gif附註:
若要執行這個範例,您必須安裝 Northwind 資料庫。如需有關如何安裝 Northwind 資料庫的詳細資訊,請參閱<下載 Northwind 和 pubs 範例資料庫>。
USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat') AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO

下列是相同的範例,而且會示範使用 LANGUAGElanguage_termtop_n_by_rank 等參數。

USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat',LANGUAGE 'English',2) 
        AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
ms177652.note(zh-tw,SQL.90).gif附註:
LANGUAGE language_term 參數不需要使用 top_n_by_rank 參數。

變更歷程記錄

版本 歷程記錄

2006 年 7 月 17 日

新增內容:
  • 加入 LANGUAGE 引數的範例。

請參閱

參考

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
資料列集函數 (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)

其他資源

使用全文檢索搜尋查詢 SQL Server
precompute rank 選項

說明及資訊

取得 SQL Server 2005 協助