Como perguntar sobre a coluna de chave de texto completo (Transact-SQL)

Normalmente, o resultado de funções com valor de conjunto de linhas CONTAINSTABLE ou FREETEXTTABLE precisam ser unidas à tabela base. Nesses casos, você precisa saber o nome da coluna de chave exclusiva. Você pode perguntar se um dado índice exclusivo é usado como chave de texto completo e pode obter o identificador da coluna de chave de texto completo.

Para perguntar se um dado índice de texto completo é usado como a coluna de chave de texto completo

  • Use uma instrução SELECT para chamar a função INDEXPROPERTY. Na chamada de função, use a função OBJECT_ID para converter o nome da tabela (nome_da_tabela) na ID de tabela, especifique o nome de um índice exclusivo para a tabela e especifique a propriedade de índice IsFulltextKey da seguinte maneira:

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

    Esta instrução retornará 1 se o índice for usado para impor a exclusividade da coluna de chave de texto completo e 0 se não impor.

    Para obter mais informações, consulte Exemplo A, mais adiante neste tópico.

Para encontrar o identificador da coluna de chave de texto completo

  • Cada tabela habilitada para texto completo tem uma coluna que é usada para impor linhas exclusivas da tabela (a coluna de chaveexclusiva). A propriedade TableFulltextKeyColumn, obtida da função OBJECTPROPERTYEX, contém a ID de coluna da coluna de chave exclusiva.

    Para obter esse identificador, você pode usar uma instrução SELECT para chamar a função OBJECTPROPERTYEX. Use a função OBJECT_ID para converter o nome da tabela (nome_da_tabela) na ID de tabela e especifique a propriedade TableFulltextKeyColumn da seguinte maneira:

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

    Para obter mais informações, consulte os exemplos “B. Obtendo o identificador da coluna de chave de texto completo” e “C. Obtendo o nome da coluna de chave exclusiva”, mais adiante neste tópico.

Exemplo

Todos os exemplos a seguir usam a tabela Document do banco de dados AdventureWorks2008R2.

A. Perguntando se um dado índice de texto completo é usado como a coluna de chave de texto completo

O exemplo a seguir pergunta se o índice PK_Document_DocumentID é usado para impor a exclusividade da coluna de chave de texto completo, da seguinte maneira:

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

Este exemplo retornará 1 se o índice PK_Document_DocumentID for usado para impor a exclusividade da coluna de chave de texto completo. Caso contrário, retornará 0 ou NULL. NULL implica que você esteja usando um nome de índice inválido, que o nome de índice não corresponde à tabela, que a tabela não existe, e assim por diante.

B. Obtendo o identificador da coluna de chave de texto completo

O próximo exemplo retorna o identificador da coluna de chave de texto completo ou NULL. NULL implica que você esteja usando um nome de índice inválido, que o nome de índice não corresponde à tabela, que a tabela não existe, e assim por diante.

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

C. Obtendo o nome da coluna de chave exclusiva

O exemplo a seguir mostra como usar o identificador da coluna de chave exclusiva para obter seu nome programaticamente.

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

Este exemplo retorna um conjunto de resultados chamado Unique Key Column, que exibe uma única linha contendo o nome da coluna de chave exclusiva da tabela Document, DocumentID. Observe que, se esta consulta continha um nome de índice inválido, se o nome de índice não correspondia à tabela, se a tabela não existia etc., será retornado NULL.