對(duì)于包含基于字符的數(shù)據(jù)類型的列(該列與單個(gè)詞和短語(yǔ),以及與另一個(gè)詞一定范圍之內(nèi)的近似詞精確或模糊(不太精確的)匹配或者加權(quán)匹配),返回具有零行、一行或多行的表。CONTAINSTABLE 可以在 SELECT 語(yǔ)句的 FROM 子句中引用,就好象它是一個(gè)常規(guī)的表名稱。
使用 CONTAINSTABLE 的查詢將指定對(duì)每一行返回一個(gè)適當(dāng)?shù)燃?jí)值 (RANK) 的包含類型的全文查詢。CONTAINSTABLE 函數(shù)使用與 CONTAINS 謂詞相同的搜索條件。
CONTAINSTABLE ( table ,
{ column | *
} , ' < contains_search_condition > '
[ , top_n_by_rank ] )
< contains_search_condition > ::=
{ < simple_term >
| < prefix_term >
| < generation_term >
| < proximity_term >
| < weighted_term >
}
| { ( < contains_search_condition > )
{ AND | AND NOT | OR } < contains_search_condition > [ ...n ]
}
< simple_term > ::=
word | " phrase "
< prefix term> ::=
< generation_term > ::=
FORMSOF ( INFLECTIONAL , < simple_term > [ ,...n ] )
< proximity_term > ::=
{ < simple_term > | < prefix_term > }
{ { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]
< weighted_term > ::=
ISABOUT
(
{
{
<simple_term>
| < prefix_term >
| < generation_term >
| < proximity_term >
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
)
table
是標(biāo)記為用于全文查詢的表的名稱。table 可以是由一部分、兩部分或三部分組成的數(shù)據(jù)庫(kù)對(duì)象名稱。 有關(guān)更多信息,請(qǐng)參見(jiàn) Transact-SQL 語(yǔ)法規(guī)則。table 不能指定服務(wù)器名稱,也不能用于對(duì)鏈接服務(wù)器的查詢。
column
駐留在 table 中的要搜索的列名。字符串?dāng)?shù)據(jù)類型的列是有效的全文檢索列。
*
指定表中所有已注冊(cè)全文檢索的列都必須用于搜索給定的包含搜索條件。
top_n_by_rank
指定只返回以降序排列的前 n 個(gè)最高等級(jí)的匹配項(xiàng)。僅當(dāng)指定了整數(shù)值 n 時(shí)應(yīng)用。
<contains_search_condition>
指定要在 column 中搜索的文本。變量不能用作搜索條件。有關(guān)更多信息,請(qǐng)參見(jiàn) CONTAINS。
返回的表中有一列名為 KEY,其中包含全文鍵值。每個(gè)全文索引表都有這樣一列,它的值保證是唯一的,而且 KEY 列中的返回值都是與包含搜索條件中指定的選擇標(biāo)準(zhǔn)相匹配的行的全文鍵值。從 OBJECTPROPERTY 函數(shù)獲得的 TableFulltextKeyColumn 屬性為這個(gè)唯一的 key 列提供標(biāo)識(shí)。若要從原始表中獲得所需要的行,請(qǐng)?jiān)?CONTAINSTABLE 行指定一個(gè)聯(lián)接。使用 CONTAINSTABLE 的 SELECT 語(yǔ)句的 FROM 子句的典型形式為:
SELECT select_list
FROM table AS FT_TBL INNER JOIN
CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL
ON FT_TBL.unique_key_column = KEY_TBL.[KEY]
CONTAINSTABLE 生成的表包含一個(gè)名稱為 RANK 的列。RANK 列是一個(gè)數(shù)值(介于 0 和 1000 之間),它為每一行指明行匹配選擇標(biāo)準(zhǔn)的狀況。在 SELECT 語(yǔ)句中,此等級(jí)值通常按照下列方法之一進(jìn)行使用:
如果兼容級(jí)別小于 70,CONTAINSTABLE 不被看作是關(guān)鍵字。有關(guān)更多信息,請(qǐng)參見(jiàn) sp_dbcmptlevel。
只有在表或被引用表的列上具有適當(dāng) SELECT 特權(quán)的用戶才有執(zhí)行權(quán)限。
下面的示例搜索包含詞 breads、fish 或 beers 以及給定每個(gè)詞的不同加權(quán)的所有產(chǎn)品名稱。對(duì)于與此搜索標(biāo)準(zhǔn)相匹配的每個(gè)返回行,顯示匹配的相關(guān)程度(等級(jí)值)。此外,等級(jí)最高的行將首先返回。
USE Northwind
GO
SELECT FT_TBL.CategoryName, FT_TBL.Description, KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
CONTAINSTABLE(Categories, Description,
'ISABOUT (breads weight (.8),
fish weight (.4), beers weight (.2) )' ) AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC
GO
對(duì)于包含位于詞"sauces"或"candies"附近的"sweet and savory"的 Description 列,下面的示例返回其所有食品分類的描述和分類名稱。所有具有"Seafood"分類名稱的行都將被忽視。僅返回等級(jí)值為 2 或等級(jí)值更高的行。
USE Northwind
GO
SELECT FT_TBL.Description,
FT_TBL.CategoryName,
KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
CONTAINSTABLE (Categories, Description,
'("sweet and savory" NEAR sauces) OR
("sweet and savory" NEAR candies)') AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
AND FT_TBL.CategoryName <> 'Seafood'
ORDER BY KEY_TBL.RANK DESC
對(duì)于包含位于詞"sauces"或"candies"附近的"sweet and savory"的 Description 列,下面的示例返回其前 10 種食品的描述和分類名稱。
相關(guān)文章SELECT FT_TBL.Description,
FT_TBL.CategoryName,
KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
CONTAINSTABLE (Categories, Description,
'("sweet and savory" NEAR sauces) OR
("sweet and savory" NEAR candies)', 10
) AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY]