sys.sp_fkeys (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsWarehouse no Microsoft FabricBanco de dados SQL 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

sys.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 AdventureWorks2025.

USE AdventureWorks2022;
GO

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

Exemplos: Azure Synapse Analytics

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.

EXECUTE sp_fkeys @pktable_name = N'DimDate';