Как запрашивать сведения о столбце полнотекстового ключа (Transact-SQL)

Обычно результат функций, возвращающих наборы строк CONTAINSTABLE или FREETEXTTABLE, необходимо соединить с базовой таблицей. В таких случаях необходимо знать уникальное имя ключевого столбца. Можно уточнить, используется ли данный уникальный индекс как полнотекстовый ключ, а также получить идентификатор столбца полнотекстового ключа.

Проверка использования данного уникального индекса в качестве столбца полнотекстового ключа

  • Вызовите функцию INDEXPROPERTY с помощью инструкции SELECT. В вызове функции используйте функцию OBJECT_ID, чтобы преобразовать имя таблицы (имя_таблицы) в идентификатор таблицы, укажите имя уникального индекса для таблицы и укажите свойство IsFulltextKey индекса следующим образом:

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

    Если индекс принудительно обеспечивает уникальность столбца полнотекстового ключа, будет возвращено значение 1, в противном случае запрос возвратит 0.

    Дополнительные сведения см. в примере А далее в этом разделе.

Поиск идентификатора столбца полнотекстового ключа

  • Каждая таблица, поддерживающая полнотекстовый поиск, имеет столбец, который обеспечивает принудительное применение уникальных строк в таблице (уникальныйключевой столбец). Свойство TableFulltextKeyColumn, возвращаемое функцией OBJECTPROPERTYEX, содержит идентификатор уникального ключевого столбца.

    Для получения идентификатора можно вызвать функцию OBJECTPROPERTYEX с помощью инструкции SELECT. Чтобы преобразовать имя таблицы (имя_таблицы) в идентификатор таблицы и задать свойство TableFulltextKeyColumn, воспользуйтесь функцией OBJECT_ID:

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

    Дополнительные сведения см. в примерах «Б. Получение идентификатора столбца полнотекстового ключа» и «В. Получение имени уникального ключевого столбца» далее в этом разделе.

Пример

Во всех последующих примерах используется таблица Document базы данных База данных AdventureWorks2008R2.

А. Проверка использования данного уникального индекса в качестве столбца полнотекстового ключа

Следующий пример уточняет, используется ли индекс PK_Document_DocumentID для обеспечения уникальности столбца полнотекстового ключа:

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

Если индекс PK_Document_DocumentID используется для обеспечения уникальности столбца полнотекстового ключа, будет возвращено значение 1. В противном случае возвращается значение 0 или NULL. NULL означает, что используется недопустимое имя индекса, имя индекса не соответствует таблице, таблица не существует и пр.

Б. Получение идентификатора столбца полнотекстового ключа

В следующем примере возвращается идентификатор столбца полнотекстового ключа или значение NULL. NULL означает, что используется недопустимое имя индекса, имя индекса не соответствует таблице, таблица не существует и пр.

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

В. Получение уникального имени ключевого столбца

В следующем примере показано, как получить имя программным образом с помощью идентификатора уникального ключевого столбца.

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.