Как запрашивать сведения о столбце полнотекстового ключа (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 базы данных AdventureWorks. Сведения об этой таблице см. в разделе Таблица Document (AdventureWorks).
А. Проверка использования данного уникального индекса в качестве столбца полнотекстового ключа
Следующий пример уточняет, используется ли индекс PK_Document_DocumentID для обеспечения уникальности столбца полнотекстового ключа:
USE AdventureWorks
GO
SELECT INDEXPROPERTY ( OBJECT_ID('Production.Document'), 'PK_Document_DocumentID', 'IsFulltextKey' )
Если индекс PK_Document_DocumentID используется для обеспечения уникальности столбца полнотекстового ключа, будет возвращено значение 1. В противном случае возвращается значение 0 или NULL. NULL означает, что используется недопустимое имя индекса, имя индекса не соответствует таблице, таблица не существует и пр.
Б. Получение идентификатора столбца полнотекстового ключа
В следующем примере возвращается идентификатор столбца полнотекстового ключа или значение NULL. NULL означает, что используется недопустимое имя индекса, имя индекса не соответствует таблице, таблица не существует и пр.
USE AdventureWorks;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO
В. Получение уникального имени ключевого столбца
В следующем примере показано, как получить имя программным образом с помощью идентификатора уникального ключевого столбца.
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.