如何:查詢全文檢索索引鍵資料行 (Transact-SQL)
一般而言,CONTAINSTABLE 或 FREETEXTTABLE 資料列集值函數的結果必須與基底資料表聯結。在這種情況下,您必須知道唯一索引鍵資料行名稱。您可以查詢給定的唯一索引是否當做全文檢索索引鍵使用,而且可以取得全文檢索索引鍵資料行的識別碼。
若要查詢給定的唯一索引是否當做全文檢索索引鍵資料行使用
使用 SELECT 陳述式來呼叫 INDEXPROPERTY 函數。在函數呼叫中,使用 OBJECT_ID 函數,將資料表的名稱 (table_name) 轉換成資料表識別碼、指定資料表之唯一索引的名稱,以及指定 IsFulltextKey 索引屬性,如下所示:
SELECT INDEXPROPERTY( OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey' );
如果索引是用來強制全文檢索索引鍵資料行的唯一性,這個陳述式就會傳回 1。如果不是,便傳回 0。
如需詳細資訊,請參閱這個主題稍後的範例 A。
若要尋找全文檢索索引鍵資料行的識別碼
每個啟用全文檢索的資料表都具有一個用來強制資料表之唯一資料列的資料行 (「唯一索引鍵資料行」(Unique Key Column))。從 OBJECTPROPERTYEX 函數中取得的 TableFulltextKeyColumn 屬性會包含唯一索引鍵資料行的資料行識別碼。
若要取得這個識別碼,您可以使用 SELECT 陳述式來呼叫 OBJECTPROPERTYEX 函數。請使用 OBJECT_ID 函數,將資料表的名稱 (table_name) 轉換成資料表識別碼,並且指定 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。