フルテキスト キー列を調査する方法 (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 関数を呼び出します。次のようにテーブル名 (table_name) をテーブル ID に変換する OBJECT_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 が返されます。