Compartilhar via


sp_fkeys (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Warehouse do PDW (Analytics Platform System) no Microsoft Fabric

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.

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_fkeys
    [ [ @pktable_name = ] N'pktable_name' ]
    [ , [ @pktable_owner = ] N'pktable_owner' ]
    [ , [ @pktable_qualifier = ] N'pktable_qualifier' ]
    [ , [ @fktable_name = ] N'fktable_name' ]
    [ , [ @fktable_owner = ] N'fktable_owner' ]
    [ , [ @fktable_qualifier = ] N'fktable_qualifier' ]
[ ; ]

Argumentos

@pktable_name [ = ] N'pktable_name'

O nome da tabela, com a chave primária, usada para retornar informações do catálogo. @pktable_name é sysname, com um padrão de NULL. Não há suporte para a correspondência de padrões curinga. Este parâmetro ou o parâmetro @fktable_name , ou ambos, devem ser fornecidos.

@pktable_owner [ = ] N'pktable_owner'

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

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 o @pktable_name especificado, o procedimento procurará uma tabela com o @pktable_name especificado pertencente ao proprietário do banco de dados. Se ela existir, as colunas dessa tabela serão retornadas.

@pktable_qualifier [ = ] N'pktable_qualifier'

O nome do qualificador da tabela (com a chave primária). @pktable_qualifier é sysname, com um padrão de NULL. Vários produtos de DBMS dão suporte à nomeação de três partes de tabelas (qualifier.owner.name). No SQL Server, o qualificador representa o nome do banco de dados. Em alguns produtos, ele representa o nome do servidor do ambiente de banco de dados da tabela.

@fktable_name [ = ] N'fktable_name'

O nome da tabela (com uma chave estrangeira) usada para retornar informações do catálogo. @fktable_name é sysname, com um padrão de NULL. Não há suporte para a correspondência de padrões curinga. Este parâmetro ou o parâmetro @pktable_name , ou ambos, devem ser fornecidos.

@fktable_owner [ = ] N'fktable_owner'

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

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 o @fktable_name especificado, o procedimento procurará uma tabela com o @fktable_name especificado pertencente ao proprietário do banco de dados. Se ela existir, as colunas dessa tabela serão retornadas.

@fktable_qualifier [ = ] N'fktable_qualifier'

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

Valores do código de retorno

Nenhum.

Conjunto 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). Esse campo sempre retorna um valor.
PKTABLE_NAME sysname Nome da tabela (com a chave primária). Esse campo sempre retorna um valor.
PKCOLUMN_NAME sysname Nome das colunas de chave primária, para cada coluna do TABLE_NAME retornado. Esse 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). Esse campo sempre retorna um valor.
FKTABLE_NAME sysname Nome da tabela (com a chave estrangeira). Esse campo sempre retorna um valor.
FKCOLUMN_NAME sysname Nome da coluna de chave estrangeira, para cada coluna do TABLE_NAME retornado. Esse campo sempre retorna um valor.
KEY_SEQ smallint Número de sequência da coluna em uma chave primária de várias colunas. Esse campo sempre retorna um valor.
UPDATE_RULE smallint Ação aplicada à chave estrangeira quando a operação SQL é uma atualização. Valores possíveis:
0 = CASCADE Alterações na chave estrangeira.
1 = NO ACTION muda se a chave estrangeira estiver presente.
2 = SET_NULL
3 = Definir como padrão
DELETE_RULE smallint Ação aplicada à chave estrangeira quando a operação SQL é uma exclusão. Valores possíveis:
0 = CASCADE Alterações na chave estrangeira.
1 = NO ACTION muda se a chave estrangeira estiver presente.
2 = SET_NULL
3 = definir padrão
FK_NAME sysname Identificador de chave estrangeira. Se não for NULL aplicável à fonte de dados. SQL Server retorna o nome da FOREIGN KEY restrição.
PK_NAME sysname Identificador da chave primária. Se não for NULL aplicável à fonte de dados. SQL Server retorna o nome da PRIMARY KEY restrição.

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

Comentários

A codificação do aplicativo que inclui tabelas com chaves estrangeiras desabilitadas pode ser implementada pelos seguintes métodos:

  • Desabilitar temporariamente a verificação de restrição (ALTER TABLE NOCHECK ou CREATE TABLE NOT FOR REPLICATION) ao trabalhar com as tabelas e, em seguida, habilitá-la novamente mais tarde.

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

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

O sp_fkeys procedimento armazenado é equivalente a SQLForeignKeys no 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 AdventureWorks2022.

USE AdventureWorks2022;
GO

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

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

O exemplo a seguir recupera uma lista de chaves estrangeiras para a tabela DimDate no banco de dados AdventureWorksPDW2012. Nenhuma linha é retornada porque o Azure Synapse Analytics não dá suporte a chaves estrangeiras.

EXEC sp_fkeys @pktable_name = N'DimDate';