sp_fkeys (Transact-SQL)

Retorna informações lógicas de chave estrangeira para o ambiente atual. Este procedimento mostra relações de chave estrangeira que incluem chaves estrangeiras desabilitadas.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

sp_fkeys [ @pktable_name = ] 'pktable_name' 
     [ , [ @pktable_owner = ] 'pktable_owner' ] 
     [ , [ @pktable_qualifier = ] 'pktable_qualifier' ] 
     { , [ @fktable_name = ] 'fktable_name' } 
     [ , [ @fktable_owner = ] 'fktable_owner' ] 
     [ , [ @fktable_qualifier = ] 'fktable_qualifier' ]

Argumentos

  • [ @pktable_name = ] 'pktable_name'
    É o nome da tabela, com a chave primária, usada para retornar informações de catálogo. pktable_name é sysname, com um padrão NULL. Não há suporte para a correspondência de padrão curinga. Este parâmetro ou o parâmetro fktable_name, ou ambos, deve ser fornecido.

  • [ @pktable_owner = ] 'pktable_owner'
    É o nome do proprietário da tabela (com a chave primária) usado para retornar informações de catálogo. pktable_owner é sysname, com um padrão NULL. Não há suporte para a correspondência de padrão curinga. Se pktable_owner não for especificado, serão aplicadas as regras de visibilidade de tabela padrão do DBMS subjacente.

    No SQL Server, se o usuário atual possuir uma tabela com o nome especificado, as colunas dessa tabela serão retornadas. Se pktable_owner não for especificado e o usuário atual não possuir uma tabela com pktable_name especificado, o procedimento procurará uma tabela com pktable_name especificado que seja do proprietário do banco de dados. Se existir, as colunas dessa tabela serão retornadas.

  • [ @pktable_qualifier = ] 'pktable_qualifier'
    É o nome do qualificador da tabela (com a chave primária). pktable_qualifier é sysname, com um padrão NULL. Diversos produtos de DBMS oferecem suporte à nomenclatura de três partes para tabelas (qualifier.owner.name). No SQL Server, o qualificador representa o nome do banco de dados. Em alguns produtos, representa o nome do servidor do ambiente de banco de dados da tabela.

  • [ @fktable_name = ] 'fktable_name'
    É o nome da tabela (com a chave estrangeira) usada para retornar informações de catálogo. fktable_name é sysname, com um padrão NULL. Não há suporte para a correspondência de padrão curinga. Este parâmetro ou o parâmetro pktable_name, ou ambos, deve ser fornecido.

  • [ @fktable_owner = ] 'fktable_owner'
    É o nome do proprietário da tabela (com uma chave estrangeira) usado para retornar informações de catálogo. fktable_owner é sysname, com um padrão NULL. Não há suporte para a correspondência de padrão curinga. Se fktable_owner não for especificado, serão aplicadas as regras de visibilidade de tabela padrão do DBMS subjacente.

    No SQL Server, se o usuário atual possuir uma tabela com o nome especificado, as colunas dessa tabela serão retornadas. Se fktable_owner não for especificado e o usuário atual não possuir uma tabela com fktable_name especificado, o procedimento procurará uma tabela com fktable_name especificado que seja do proprietário do banco de dados. Se existir, as colunas dessa tabela serão retornadas.

  • [ @fktable_qualifier =] 'fktable_qualifier'
    É o nome do qualificador da tabela (com uma chave estrangeira). fktable_qualifier é sysname, com um padrão NULL. No SQL Server, o qualificador representa o nome do banco de dados. Em alguns produtos, representa o nome do servidor do ambiente de banco de dados da tabela.

Valores de código de retorno

Nenhum

Conjuntos de resultados

Nome da coluna

Tipo de dados

Descrição

PKTABLE_QUALIFIER

sysname

Nome do qualificador da tabela (com a chave primária). Este campo pode ser NULL.

PKTABLE_OWNER

sysname

Nome do proprietário da tabela (com a chave primária). Este campo sempre retorna um valor.

PKTABLE_NAME

sysname

Nome da tabela (com a chave primária). Este campo sempre retorna um valor.

PKCOLUMN_NAME

sysname

Nome das colunas de chave primária, para cada coluna do TABLE_NAME retornado. Este campo sempre retorna um valor.

FKTABLE_QUALIFIER

sysname

Nome do qualificador da tabela (com uma chave estrangeira). Este campo pode ser NULL.

FKTABLE_OWNER

sysname

Nome do proprietário da tabela (com uma chave estrangeira). Este campo sempre retorna um valor.

FKTABLE_NAME

sysname

Nome da tabela (com a chave estrangeira). Este campo sempre retorna um valor.

FKCOLUMN_NAME

sysname

Nome da coluna de chave estrangeira, para cada coluna do TABLE_NAME retornado. Este campo sempre retorna um valor.

KEY_SEQ

smallint

Número de seqüência da coluna em uma chave primária de várias colunas. Este campo sempre retorna um valor.

UPDATE_RULE

smallint

Ação aplicada à chave estrangeira quando a operação SQL é uma atualização. O SQL Server retorna 0 ou 1 para estas colunas:

0=CASCADE altera para chave estrangeira.

1=NO ACTION altera se a chave estrangeira estiver presente.

2=SET_NULL define a chave estrangeira como NULL.

DELETE_RULE

smallint

Ação aplicada à chave estrangeira quando a operação SQL é uma exclusão. O SQL Server retorna 0 ou 1 para estas colunas:

0=CASCADE altera para chave estrangeira.

1=NO ACTION altera se a chave estrangeira estiver presente.

2=SET_NULL define a chave estrangeira como NULL.

FK_NAME

sysname

Identificador de chave estrangeira. É NULL se não for aplicável à fonte de dados. O SQL Server retorna o nome da restrição FOREIGN KEY.

PK_NAME

sysname

Identificador de chave primária. É NULL se não for aplicável à fonte de dados. O SQL Server retorna o nome da restrição PRIMARY KEY.

Os resultados retornados são ordenados por FKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAME e KEY_SEQ.

Comentários

A codificação de aplicativo incluindo tabelas com chaves estrangeiras desabilitadas pode ser implementada conforme o seguinte:

  • Desabilitando temporariamente a verificação de restrições (ALTER TABLE NOCHECK ou CREATE TABLE NOT FOR REPLICATION) ao trabalhar com tabelas e habilitando novamente mais tarde. Para obter mais informações sobre a opção NOT FOR REPLICATION, consulte Controlando restrições, identidades e gatilhos com NOT FOR REPLICATION.

  • Usando gatilhos ou código de aplicativo para impor relações.

Se o nome da tabela de chave primária for fornecido e se o nome da tabela de chave estrangeira for NULL, sp_fkeys retornará todas as tabelas que incluem uma chave estrangeira para a tabela especificada. Se o nome da tabela de chave estrangeira for fornecido e se o nome da tabela de chave primária for NULL, sp_fkeys retornará todas as tabelas associadas por uma relação de chave primária/chave estrangeira com chaves estrangeiras na tabela de chave estrangeira.

O procedimento armazenado de sp_fkeys é equivalente a SQLForeignKeys em ODBC.

Permissões

Requer a permissão SELECT no esquema.

Exemplos

O exemplo a seguir recupera uma lista de chaves estrangeiras para a tabela HumanResources.Department no banco de dados AdventureWorks.

USE AdventureWorks;
GO
EXEC sp_fkeys @pktable_name = N'Department'
    ,@pktable_owner = N'HumanResources'