sp_fkeys (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse in Microsoft Fabric

Gibt logische Fremdschlüsselinformationen für die aktuelle Umgebung zurück. Diese Prozedur zeigt Fremdschlüsselbeziehungen an, wobei auch deaktivierte Fremdschlüssel berücksichtigt werden.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

[ @pktable_name=] 'pktable_name'
Der Name der Tabelle mit dem Primärschlüssel, mit der Kataloginformationen zurückgegeben werden. pktable_name ist von Datentyp sysname und hat den Standardwert NULL. Mustervergleiche mit Platzhalterzeichen werden nicht unterstützt. Dieser Parameter oder der Parameter fktable_name oder beide müssen angegeben werden.

[ @pktable_owner=] 'pktable_owner'
Der Name des Besitzers der Tabelle (mit dem Primärschlüssel), die zum Zurückgeben von Kataloginformationen verwendet wird. pktable_owner ist vom Datentyp sysname und hat den Standardwert NULL. Mustervergleiche mit Platzhalterzeichen werden nicht unterstützt. Wenn pktable_owner nicht angegeben ist, werden die Standardregeln für die Tabellensichtbarkeit des zugrunde liegenden DBMS angewendet.

In SQL Server bedeutet dies: Wenn der aktuelle Benutzer oder die aktuelle Benutzerin eine Tabelle mit dem angegebenen Namen besitzt, werden die Spalten dieser Tabelle zurückgegeben. Wenn pktable_owner nicht angegeben ist und der aktuelle Benutzer/die aktuelle Benutzerin keine Tabelle mit dem angegebenen pktable_name besitzt, sucht die Prozedur nach einer Tabelle mit dem angegebenen pktable_name im Besitz des Datenbankbesitzers. Sofern eine solche Tabelle vorhanden ist, werden die Spalten dieser Tabelle zurückgegeben.

[ @pktable_qualifier =] 'pktable_qualifier'
Der Name des Qualifizierers der Tabelle (mit dem Primärschlüssel). pktable_qualifier ist vom Datentyp „sysname“ und hat den Standardwert NULL. Verschiedene DBMS-Produkte unterstützen eine dreiteilige Benennung für Tabellen (qualifier.owner.name). In SQL Server repräsentiert der Qualifizierer den Datenbanknamen. Bei anderen Produkten stellt sie den Servernamen der Datenbankumgebung für die Tabelle dar.

[ @fktable_name=] 'fktable_name'
Der Name der Tabelle (mit einem Fremdschlüssel), mit der Kataloginformationen zurückgegeben werden. fktable_name ist von Datentyp „sysname“ und hat den Standardwert NULL. Mustervergleiche mit Platzhalterzeichen werden nicht unterstützt. Dieser Parameter oder der Parameter pktable_name oder beide müssen angegeben werden.

[ @fktable_owner =] 'fktable_owner'
Der Name des Besitzers der Tabelle (mit einem Fremdschlüssel), mit der Kataloginformationen zurückgegeben werden. fktable_owner ist vom Datentyp sysname und hat den Standardwert NULL. Mustervergleiche mit Platzhalterzeichen werden nicht unterstützt. Wenn fktable_owner nicht angegeben ist, werden die Standardregeln für die Tabellensichtbarkeit des zugrunde liegenden DBMS angewendet.

In SQL Server bedeutet dies: Wenn der aktuelle Benutzer oder die aktuelle Benutzerin eine Tabelle mit dem angegebenen Namen besitzt, werden die Spalten dieser Tabelle zurückgegeben. Wenn fktable_owner nicht angegeben ist und der aktuelle Benutzer/die aktuelle Benutzerin keine Tabelle mit dem angegebenen fktable_name besitzt, sucht die Prozedur nach einer Tabelle mit dem angegebenen fktable_name im Besitz des Datenbankbesitzers. Sofern eine solche Tabelle vorhanden ist, werden die Spalten dieser Tabelle zurückgegeben.

[ @fktable_qualifier= ] 'fktable_qualifier'
Der Name des Qualifizierers der Tabelle (mit einem Fremdschlüssel). fktable_qualifier ist vom Datentyp sysname und hat den Standardwert NULL. In SQL Server repräsentiert der Qualifizierer den Datenbanknamen. Bei anderen Produkten stellt sie den Servernamen der Datenbankumgebung für die Tabelle dar.

Rückgabecodewerte

Keine

Resultsets

Spaltenname Datentyp BESCHREIBUNG
PKTABLE_QUALIFIER sysname Der Name des Qualifizierers der Tabelle (mit dem Primärschlüssel). Dieses Feld kann den Wert NULL annehmen.
PKTABLE_OWNER sysname Der Name des Besitzers der Tabelle (mit dem Primärschlüssel). Dieses Feld gibt immer einen Wert zurück.
PKTABLE_NAME sysname Name der Tabelle (mit dem Primärschlüssel). Dieses Feld gibt immer einen Wert zurück.
PKCOLUMN_NAME sysname Der Name der Primärschlüsselspalten für jede Spalte des zurückgegebenen TABLE_NAME-Werts. Dieses Feld gibt immer einen Wert zurück.
FKTABLE_QUALIFIER sysname Der Name des Qualifizierers der Tabelle (mit einem Fremdschlüssel). Dieses Feld kann den Wert NULL annehmen.
FKTABLE_OWNER sysname Der Name des Besitzers der Tabelle (mit einem Fremdschlüssel). Dieses Feld gibt immer einen Wert zurück.
FKTABLE_NAME sysname Der Name der Tabelle (mit einem Fremdschlüssel). Dieses Feld gibt immer einen Wert zurück.
FKCOLUMN_NAME sysname Der Name der Fremdschlüsselspalten für jede Spalte des zurückgegebenen TABLE_NAME-Werts. Dieses Feld gibt immer einen Wert zurück.
KEY_SEQ smallint Die Sequenznummer der Spalte bei einem Primärschlüssel, der durch mehrere Spalten definiert wird. Dieses Feld gibt immer einen Wert zurück.
UPDATE_RULE smallint Die Aktion, die für den Fremdschlüssel ausgeführt wird, wenn es sich bei dem SQL-Vorgang um ein Update handelt. Mögliche Werte:
0=CASCADE; kaskadierende Änderungen am Fremdschlüssel.
1=NO ACTION; keine Änderungen, wenn der Fremdschlüssel vorhanden ist.
2 = Null festlegen
3 = Standardwert festlegen
DELETE_RULE smallint Die Aktion, die für den Fremdschlüssel ausgeführt wird, wenn es sich bei dem SQL-Vorgang um eine Löschung handelt. Mögliche Werte:
0=CASCADE; kaskadierende Änderungen am Fremdschlüssel.
1=NO ACTION; keine Änderungen, wenn der Fremdschlüssel vorhanden ist.
2 = Null festlegen
3 = Standardwert festlegen
FK_NAME sysname Der Fremdschlüsselbezeichner. Ist NULL, wenn er auf die Datenquelle nicht anwendbar ist. SQL Server gibt den Namen der FOREIGN KEY-Einschränkung zurück.
PK_NAME sysname Der Primärschlüsselbezeichner. Ist NULL, wenn er auf die Datenquelle nicht anwendbar ist. SQL Server gibt den Namen der PRIMARY KEY-Einschränkung zurück.

Die zurückgegebenen Informationen werden nach folgenden Spalten sortiert: FKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAME und KEY_SEQ.

Bemerkungen

Eine Anwendungscodierung, die Tabellen mit deaktivierten Fremdschlüsseln enthält, kann folgendermaßen implementiert werden:

  • Deaktivieren Sie bei Verwendung der Tabellen vorübergehend die Überprüfung von Einschränkungen (ALTER TABLE NOCHECK oder CREATE TABLE NOT FOR REPLICATION), und aktivieren Sie sie später wieder.

  • Erzwingen Sie Beziehungen mithilfe von Triggern oder Anwendungscode.

Wenn für die Primärschlüsseltabelle ein Name, für die Fremdschlüsseltabelle jedoch NULL angegeben wurde, gibt sp_fkeys alle Tabellen mit einem Fremdschlüssel für die angegebene Tabelle zurück. Im umgekehrten Fall, d. h., wenn für die Fremdschlüsseltabelle ein Name, für die Primärschlüsseltabelle jedoch NULL angegeben wird, gibt sp_fkeys alle Tabellen zurück, die einen mit der Fremdschlüsseltabelle in Beziehung stehenden Primärschlüssel besitzen.

Die gespeicherte Prozedur sp_fkeys entspricht SQLForeignKeys in ODBC.

Berechtigungen

Erfordert die SELECT-Berechtigung im Schema.

Beispiele

Im folgenden Beispiel wird eine Liste der Fremdschlüssel für die HumanResources.Department-Tabelle in der AdventureWorks2022-Datenbank abgerufen.

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

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

Im folgenden Beispiel wird eine Liste der Fremdschlüssel für die DimDate-Tabelle in der AdventureWorksPDW2012-Datenbank abgerufen. Es werden keine Zeilen zurückgegeben, da Azure Synapse Analytics keine Fremdschlüssel unterstützt.

EXEC sp_fkeys @pktable_name = N'DimDate';  

Weitere Informationen

Gespeicherte Prozeduren für Kataloginformationen (Transact-SQL)
Gespeicherte Systemprozeduren (Transact-SQL)
sp_pkeys (Transact-SQL)