如何查询全文键列 (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. 获取唯一键列名称”。
示例
以下示例均使用 AdventureWorks 数据库的 Document 表。有关此表的信息,请参阅 Document 表 (AdventureWorks)。
A. 查询给定的索引是否作为全文键列使用
下例查询 PK_Document_DocumentID 索引是否用于强制实现全文键列的唯一性,如下所示:
USE AdventureWorks
GO
SELECT INDEXPROPERTY ( OBJECT_ID('Production.Document'), 'PK_Document_DocumentID', 'IsFulltextKey' )
如果使用 PK_Document_DocumentID 索引来强制实现全文键列的唯一性,则此示例返回 1。否则,它返回 0 或 NULL。NULL 表示您使用的是无效索引名称,索引名称与表不对应,或表不存在,等等。
B. 获取全文键列的标识符
下例返回全文键列的标识符或 NULL。NULL 表示您使用的是无效索引名称,索引名称与表不对应,或表不存在,等等。
USE AdventureWorks;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO
C. 获取唯一键列名称
下例说明如何以编程方式使用唯一键列的标识符获取其名称。
USE AdventureWorks;
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。