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 disattivate.
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 è di tipo sysname e il 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 è di tipo sysname e il 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. 2 = SET_NULL; la chiave esterna viene impostata su NULL. |
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. 2 = SET_NULL; la chiave esterna viene impostata su NULL. |
FK_NAME |
sysname |
Identificatore della chiave esterna. NULL se non è applicabile all'origine dei 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 alle colonne FKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAME e KEY_SEQ.
Osservazioni
È possibile implementare codice di applicazione che include tabelle con chiavi esterne disattivate nei modi seguenti:
Disattivazione temporanea del controllo dei vincoli ALTER TABLE NOCHECK o CREATE TABLE NOT FOR REPLICATION mentre si utilizzano le tabelle e successiva riattivazione 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 corrisponde a SQLForeignKeys in ODBC.
Autorizzazioni
È richiesta l'autorizzazione SELECT per lo schema.
Esempi
Nell'esempio seguente viene recuperato un elenco delle chiavi esterne per la tabella HumanResources.Department nel database AdventureWorks.
USE AdventureWorks;
GO
EXEC sp_fkeys @pktable_name = N'Department'
,@pktable_owner = N'HumanResources'
Vedere anche