如何查询全文键列 (Transact-SQL)

通常情况下,CONTAINSTABLE 或 FREETEXTTABLE 行集值函数的结果需要与基表相联接。在这样的情况下,需要知道唯一键列名称。可以查询给定的唯一索引是否作为全文键使用,并且可以获取全文键列的标识符。

查询给定的唯一索引是否作为全文键列使用

  • 使用 SELECT 语句调用 INDEXPROPERTY 函数。在此函数的调用过程中,使用 OBJECT_ID 函数将表名 (table_name) 转换为表 ID,指定该表的唯一索引的名称,然后指定 IsFulltextKey 索引属性,如下所示:

    SELECT INDEXPROPERTY( OBJECT_ID('table_name'), 'index_name',  'IsFulltextKey' );
    

    如果使用此索引来强制实现全文键列的唯一性,此语句返回 1,否则返回 0。

    有关详细信息,请参阅本主题后面的示例 A。

查找全文键列的标识符

  • 每个启用全文的表都有一个列,该列用于强制实现表中行的唯一性(“唯一键列”)。从 OBJECTPROPERTYEX 函数获取的 TableFulltextKeyColumn 属性包含唯一键列的列 ID。

    若要获取此标识符,可以使用 SELECT 语句调用 OBJECTPROPERTYEX 函数。使用 OBJECT_ID 函数将表名 (table_name) 转换为表 ID,并指定 TableFulltextKeyColumn 属性,如下所示:

    SELECT OBJECTPROPERTYEX(OBJECT_ID( 'table_name'), 'TableFulltextKeyColumn' ) AS 'Column Identifier';
    

    有关详细信息,请参阅本主题后面的示例“B. 获取全文键列的标识符”和“C. 获取唯一键列名称”。

示例

以下示例均使用 AdventureWorks2008R2 数据库的 Document 表。

A. 查询给定的索引是否作为全文键列使用

下例查询 PK_Document_DocumentID 索引是否用于强制实现全文键列的唯一性,如下所示:

USE AdventureWorks2008R2;
GO
SELECT INDEXPROPERTY ( OBJECT_ID('Production.Document'), 'PK_Document_DocumentID',  'IsFulltextKey' )

如果使用 PK_Document_DocumentID 索引来强制实现全文键列的唯一性,则此示例返回 1。否则,它返回 0 或 NULL。NULL 表示您使用的是无效索引名称,索引名称与表不对应,或表不存在,等等。

B. 获取全文键列的标识符

下例返回全文键列的标识符或 NULL。NULL 表示您使用的是无效索引名称,索引名称与表不对应,或表不存在,等等。

USE AdventureWorks2008R2;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

C. 获取唯一键列名称

下例说明如何以编程方式使用唯一键列的标识符获取其名称。

USE AdventureWorks2008R2;
GO
DECLARE @key_column sysname;
SET @key_column = Col_Name(Object_Id('Production.Document'),
ObjectProperty(Object_id('Production.Document'),
'TableFulltextKeyColumn') 
);
SELECT @key_column AS 'Unique Key Column';
GO

此示例返回一个名为 Unique Key Column 的结果集列,该结果集列显示单个行,该行包含 Document 表的唯一键列 DocumentID 的名称。请注意,如果此查询包含无效的索引名称,索引名称与表不对应或表不存在等,它将返回 NULL。