sp_fkeys (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Analytics Platform System (PDW) Warehouse in Microsoft Fabric

Restituisce informazioni sulle chiavi esterne logiche per l'ambiente corrente. Questa procedura visualizza le relazioni di chiave esterna, incluse le chiavi esterne disabilitate.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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' ]
[ ; ]

Argomenti

[ @pktable_name = ] N'pktable_name'

Nome della tabella, con la chiave primaria, utilizzata per restituire informazioni sul catalogo. @pktable_name è sysname, con un valore predefinito .NULL La corrispondenza dei criteri con caratteri jolly non è supportata. Questo parametro o il parametro @fktable_name , o entrambi, deve essere fornito.

[ @pktable_owner = ] N'pktable_owner'

Nome del proprietario della tabella (con la chiave primaria) utilizzato per restituire informazioni sul catalogo. @pktable_owner è sysname, con un valore predefinito .NULL La corrispondenza dei criteri con caratteri jolly non è supportata. Se @pktable_owner non viene specificato, si applicano le regole di visibilità della tabella predefinite del sistema di gestione del database sottostante.

In SQL Server, se l'utente corrente è proprietario di una tabella con il nome specificato, vengono restituite le colonne della tabella. Se @pktable_owner non è specificato e l'utente corrente non possiede una tabella con il @pktable_name specificato, la procedura cerca una tabella con il @pktable_name specificato di proprietà del proprietario del database. Se viene individuata, vengono restituite le colonne di tale tabella.

[ @pktable_qualifier = ] N'pktable_qualifier'

Nome della tabella (con la chiave primaria) qualificatore. @pktable_qualifier è sysname, con il valore predefinito NULL. Vari prodotti DBMS supportano la denominazione in tre parti per le tabelle (qualifier.owner.name). In SQL Server il qualificatore rappresenta il nome del database. In altri prodotti rappresenta il nome del server dell'ambiente di database della tabella.

[ @fktable_name = ] N'fktable_name'

Nome della tabella (con una chiave esterna) utilizzato per restituire informazioni sul catalogo. @fktable_name è sysname, con un valore predefinito .NULL La corrispondenza dei criteri con caratteri jolly non è supportata. Questo parametro o il parametro @pktable_name , o entrambi, deve essere fornito.

[ @fktable_owner = ] N'fktable_owner'

Nome del proprietario della tabella (con una chiave esterna) utilizzato per restituire informazioni sul catalogo. @fktable_owner è sysname, con un valore predefinito .NULL La corrispondenza dei criteri con caratteri jolly non è supportata. Se non viene specificato @fktable_owner , si applicano le regole di visibilità della tabella predefinite del sistema DBMS sottostante.

In SQL Server, se l'utente corrente è proprietario di una tabella con il nome specificato, vengono restituite le colonne della tabella. Se @fktable_owner non è specificato e l'utente corrente non possiede una tabella con il @fktable_name specificato, la procedura cerca una tabella con il @fktable_name specificato di proprietà del proprietario del database. Se viene individuata, vengono restituite le colonne di tale tabella.

[ @fktable_qualifier = ] N'fktable_qualifier'

Nome del qualificatore della tabella (con una chiave esterna). @fktable_qualifier è sysname, con un valore predefinito .NULL In SQL Server il qualificatore rappresenta il nome del database. In altri prodotti rappresenta il nome del server dell'ambiente di database della tabella.

Valori del codice restituito

Nessuno.

Set di risultati

Nome colonna Tipo di dati Descrizione
PKTABLE_QUALIFIER sysname Nome del qualificatore della tabella contenente la chiave primaria. Questo campo può essere NULL.
PKTABLE_OWNER sysname Nome del proprietario della tabella contenente la chiave primaria. Questo campo restituisce sempre un valore.
PKTABLE_NAME sysname Nome della tabella contenente la chiave primaria. Questo campo restituisce sempre un valore.
PKCOLUMN_NAME sysname Nome delle colonne chiave primaria, per ogni colonna dell'oggetto TABLE_NAME restituito. Questo campo restituisce sempre un valore.
FKTABLE_QUALIFIER sysname Nome del qualificatore della tabella contenente una chiave esterna. Questo campo può essere NULL.
FKTABLE_OWNER sysname Nome del proprietario della tabella contenente una chiave esterna. Questo campo restituisce sempre un valore.
FKTABLE_NAME sysname Nome della tabella contenente una chiave esterna. Questo campo restituisce sempre un valore.
FKCOLUMN_NAME sysname Nome della colonna chiave esterna, per ogni colonna dell'oggetto TABLE_NAME restituito. Questo campo restituisce sempre un valore.
KEY_SEQ smallint Numero sequenziale della colonna in una chiave primaria a più colonne. Questo campo restituisce sempre un valore.
UPDATE_RULE smallint Azione applicata alla chiave esterna quando l'operazione SQL è un aggiornamento. Valori possibili:
0 = CASCADE modifiche alla chiave esterna.
1 = NO ACTION cambia se la chiave esterna è presente.
2 = SET_NULL
3 = impostazione predefinita
DELETE_RULE smallint Azione applicata alla chiave esterna quando l'operazione SQL è un'operazione di eliminazione. Valori possibili:
0 = CASCADE modifiche alla chiave esterna.
1 = NO ACTION cambia se la chiave esterna è presente.
2 = SET_NULL
3 = impostazione predefinita
FK_NAME sysname Identificatore della chiave esterna. È NULL se non applicabile all'origine dati. SQL Server restituisce il nome del FOREIGN KEY vincolo.
PK_NAME sysname Identificatore della chiave primaria. È NULL se non applicabile all'origine dati. SQL Server restituisce il nome del PRIMARY KEY vincolo.

I risultati restituiti vengono ordinati in FKTABLE_QUALIFIERbase a , FKTABLE_OWNERFKTABLE_NAME, e KEY_SEQ.

Osservazioni:

La codifica dell'applicazione che include tabelle con chiavi esterne disabilitate può essere implementata tramite i metodi seguenti:

  • Disabilitando temporaneamente il controllo dei vincoli (ALTER TABLE NOCHECK o CREATE TABLE NOT FOR REPLICATION) durante l'uso delle tabelle e quindi abilitandolo di nuovo in un secondo momento.

  • Utilizzo di trigger o codice di applicazione per l'imposizione di relazioni.

Se viene specificato il nome della tabella della chiave primaria e il nome della tabella della chiave esterna è NULL, sp_fkeys restituisce tutte le tabelle che includono una chiave esterna alla tabella specificata. Se viene specificato il nome della tabella di chiave esterna e il nome della tabella della chiave primaria è NULL, sp_fkeys restituisce tutte le tabelle correlate da una relazione chiave primaria/chiave esterna alle chiavi esterne nella tabella di chiave esterna.

La sp_fkeys stored procedure equivale a SQLForeignKeys in ODBC.

Autorizzazioni

È richiesta SELECT l'autorizzazione per lo schema.

Esempi

Nell'esempio seguente viene recuperato un elenco delle chiavi esterne per la tabella HumanResources.Department nel database AdventureWorks2022.

USE AdventureWorks2022;
GO

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

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

Nell'esempio seguente viene recuperato un elenco delle chiavi esterne per la tabella DimDate nel database AdventureWorksPDW2012. Non vengono restituite righe perché Azure Synapse Analytics non supporta chiavi esterne.

EXEC sp_fkeys @pktable_name = N'DimDate';