sp_fkeys (Transact-SQL)

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

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • [ @pktable_name=\] 'pktable_name'
    Nome della tabella, contenente la chiave primaria, utilizzata per restituire informazioni del catalogo. pktable_name è di tipo sysname e il valore predefinito è NULL. Le ricerche con caratteri jolly non sono supportate. È necessario specificare questo parametro o il parametro fktable_name oppure entrambi.

  • [ @pktable_owner=\] 'pktable_owner'
    Nome del proprietario della tabella contenente la chiave primaria, utilizzata per restituire informazioni del catalogo. pktable_owner è di tipo sysname e il valore predefinito è NULL. Le ricerche con caratteri jolly non sono supportate. Se non si specifica pktable_owner, vengono applicate le regole di visibilità della tabella predefinite del DBMS sottostante.

    In SQL Server se l'utente corrente è il proprietario di una tabella avente il nome specificato, vengono restituite le colonne di tale tabella. Se pktable_owner viene omesso e l'utente corrente non è il proprietario di una tabella con il valore pktable_name specificato, viene eseguita la ricerca di una tabella con nome corrispondente al valore pktable_name specificato e di proprietà del proprietario del database. Se viene individuata, vengono restituite le colonne di tale tabella.

  • [ @pktable_qualifier =] 'pktable_qualifier'
    Nome del qualificatore della tabella contenente la chiave primaria. pktable_qualifier è sysname con valore predefinito NULL. Vari prodotti DBMS supportano nomi in tre parti per le tabelle, ovvero 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=\] 'fktable_name'
    Nome della tabella contenente una chiave esterna, utilizzata per restituire informazioni del catalogo. fktable_name is sysname con valore predefinito NULL. Le ricerche con caratteri jolly non sono supportate. È necessario specificare questo parametro o il parametro pktable_name oppure entrambi.

  • [ @fktable_owner =] 'fktable_owner'
    Nome del proprietario della tabella contenente la chiave esterna, utilizzata per restituire informazioni del catalogo. fktable_owner è di tipo sysname e il valore predefinito è NULL. Le ricerche con caratteri jolly non sono supportate. Se non si specifica fktable_owner, vengono applicate le regole di visibilità della tabella predefinite del sistema DBMS sottostante.

    In SQL Server se l'utente corrente è il proprietario di una tabella avente il nome specificato, vengono restituite le colonne di tale tabella. Se fktable_owner viene omesso e l'utente corrente non è il proprietario di una tabella con il valore fktable_name specificato, viene eseguita la ricerca di una tabella con nome corrispondente al valore fktable_name specificato e di proprietà del proprietario del database. Se viene individuata, vengono restituite le colonne di tale tabella.

  • [ @fktable_qualifier= ] 'fktable_qualifier'
    Nome del qualificatore della tabella contenente una chiave esterna. fktable_qualifier è di tipo sysname e il 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 restituiti

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. In questo campo viene sempre restituito un valore.

PKTABLE_NAME

sysname

Nome della tabella contenente la chiave primaria. In questo campo viene sempre restituito un valore.

PKCOLUMN_NAME

sysname

Nome delle colonne chiave primaria, per ogni colonna della tabella TABLE_NAME restituita. In questo campo viene sempre restituito 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. In questo campo viene sempre restituito un valore.

FKTABLE_NAME

sysname

Nome della tabella contenente una chiave esterna. In questo campo viene sempre restituito un valore.

FKCOLUMN_NAME

sysname

Nome della colonna chiave esterna, per ogni colonna della tabella TABLE_NAME restituita. In questo campo viene sempre restituito un valore.

KEY_SEQ

smallint

Numero di sequenza della colonna in una chiave primaria a più colonne. In questo campo viene sempre restituito un valore.

UPDATE_RULE

smallint

Azione applicata alla chiave esterna quando l'operazione SQL è un aggiornamento. SQL Server restituisce 0 o 1 per queste colonne:

0 = modifiche di tipo CASCADE alla chiave esterna.

1 = modifiche di tipo NO ACTION se la chiave esterna è presente.

DELETE_RULE

smallint

Azione applicata alla chiave esterna quando l'operazione SQL è un'operazione di eliminazione. SQL Server restituisce 0 o 1 per queste colonne:

0 = modifiche di tipo CASCADE alla chiave esterna.

1 = modifiche di tipo NO ACTION se la chiave esterna è presente.

FK_NAME

sysname

Identificatore della chiave esterna. NULL se non è applicabile all'origine dati. SQL Server restituisce il nome del vincolo FOREIGN KEY.

PK_NAME

sysname

Identificatore della chiave primaria. NULL se non è applicabile all'origine dei dati. SQL Server restituisce il nome del vincolo PRIMARY KEY.

I risultati restituiti vengono ordinati in base aFKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAME, and KEY_SEQ.

Osservazioni

È possibile implementare codice di applicazione che include tabelle con chiavi esterne disabilitate nei modi seguenti:

  • Disabilitazione temporanea del controllo dei vincoli ALTER TABLE NOCHECK o CREATE TABLE NOT FOR REPLICATION mentre si utilizzano le tabelle e successiva riabilitazione del controllo. Per ulteriori informazioni sull'opzione NOT FOR REPLICATION, vedere Controllo di vincoli, identità e trigger con l'opzione NOT FOR REPLICATION.

  • 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 contenenti una chiave esterna per la tabella specificata. Se viene specificato il nome della tabella della chiave esterna e il nome della tabella della chiave primaria è NULL, sp_fkeys restituisce tutte le tabelle correlate tramite una relazione tra chiave primaria e chiave esterna per le chiavi esterne della tabella della chiave esterna.

La stored procedure sp_fkeys è equivalente a SQLForeignKeys in ODBC.

Autorizzazioni

È necessario disporre dell'autorizzazione SELECT per lo schema.

Esempi

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

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