sp_fulltext_keymappings (Transact-SQL)

返回文档标识符 (DocId) 和全文键值之间的映射。DocID 列包含的值为 bigint 整数值,该值映射到全文索引表中的某一特定全文键值。满足搜索条件的 DocId 值将从全文引擎传递到数据库引擎,在数据库引擎中,它们被映射到要查询的基表中的全文键值。全文键列是表的某一列上必需的唯一索引。 

主题链接图标Transact-SQL 语法约定

语法

sp_fulltext_keymappings { table_id | table_id, docid | table_id, NULL, key }

参数

  • table_id
    全文索引表的对象 ID。如果指定了无效的 table_id,则会返回错误。有关获得某个表的对象 ID 的信息,请参阅 OBJECT_ID (Transact-SQL)

  • docid
    与键值相对应的内部文档标识符 (DocId)。无效的 docid 值不会返回任何结果。有关文档标识符的信息,请参阅全文索引的结构

  • key
    指定表中的全文键值。无效的 key 值不会返回任何结果。有关全文键值的信息,请参阅如何查询全文键列 (Transact-SQL)

重要说明重要提示

有关使用一个、两个或三个参数的信息,请参阅本主题后面的“备注”部分。

返回代码值

无。

结果集

列名

数据类型

说明

DocId

bigint

与键值相对应的内部文档标识符 (DocId) 列。

Key

*

指定表中的全文键值。

如果在映射表中不存在任何全文键,则返回一个空的行集。

* Key 的数据类型与基表中全文键列的数据类型相同。

权限

此函数是公开的,因此不需要任何特殊权限。

注释

下表说明了使用一个、两个或三个参数的效果。

此参数列表…

结果…

table_id

如果只使用 table_id 参数进行调用,sp_fulltext_keymappings 返回所指定基表中的所有全文键 (Key) 值,以及与每个键对应的 DocId。包括挂起删除的键。

此函数对于排除各种问题十分有用。如果所选的全文键不是整数数据类型,它对于查看全文索引内容尤为有用。这涉及到联接 sys.dm_fts_index_keywords_by_document 的结果及 sp_fulltext_keymappings 的结果。有关详细信息,请参阅 sys.dm_fts_index_keywords_by_document (Transact-SQL)

但是,我们通常建议在可能的情况下使用指定了特定全文键或 DocID 的参数执行 sp_fulltext_keymappings。与返回完整的键映射相比,这种方法要高效许多,尤其是在处理超大表的时候,对于这些表,返回整个键映射的性能开销可能过于巨大。

table_id, docid

如果仅指定 table_id 和 docid,docid 必须是非 NULL 并在指定的表中指定一个有效的 DocId。若要隔离基表中与特定全文索引的 DocID 对应的自定义全文键,此函数十分有用。

table_id, NULL, key

如果存在三个参数,第二个参数必须是 NULL,并且 key 必须为非 NULL 并指定来自指定表的一个有效全文键值。若要隔离基表中与特定全文键对应的 DocID,此函数十分有用。

在以下任一情况下会返回一个错误:

  • 指定了一个无效 table_id。

  • 表没有经过全文索引。

  • 参数应该为非 NULL,但是现在为 NULL

示例

注意注意

本节中的示例使用 AdventureWorks2008R2 示例数据库的 Production.ProductReview 表。您可以通过执行在 CREATE FULLTEXT INDEX (Transact-SQL) 中为 ProductReview 表提供的示例来创建此索引。

A. 获取所有键和 DocId 值

下面的示例使用 DECLARE 语句创建局部变量 @table_id,并将 ProductReview 表的 ID 赋值给该变量。此示例通过为 table_id 参数指定 @table_id 来执行 sp_fulltext_keymappings

注意注意

小表适合于使用仅具有 table_id 参数的 sp_fulltext_keymappings

USE AdventureWorks2008R2;
GO
DECLARE @table_id int = OBJECT_ID(N'Production.ProductReview');
EXEC sp_fulltext_keymappings @table_id;
GO

此示例返回表中的所有 DocId 和全文键,如下所示:

docid

key

1

1

1

2

2

2

3

3

3

4

4

4

B. 获取特定键值的 DocId 值

下面的示例使用 DECLARE 语句创建局部变量 @table_id,并将 ProductReview 表的 ID 赋值给该变量。此示例通过为 table_id 参数指定 @table_id、为 docid 参数指定 NULL 以及为 key 参数指定 4 来执行 sp_fulltext_keymappings

注意注意

小表适合于使用仅具有 table_id 参数的sp_fulltext_keymappings

USE AdventureWorks2008R2;
GO
DECLARE @table_id int = OBJECT_ID(N'Production.ProductReview');
EXEC sp_fulltext_keymappings @table_id, NULL, 4;
GO

此示例返回以下结果。

docid

key

4

4

4