Freigeben über


sp_fkeys (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzAzure Synapse AnalyticsAnalytics Platform System (PDW)Lagerhaus in Microsoft FabricSQL-Datenbank 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 = ] 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' ]
[ ; ]

Argumente

[ @pktable_name = ] N'pktable_name'

Der Name der Tabelle mit dem Primärschlüssel, der zum Zurückgeben von Kataloginformationen verwendet wird. @pktable_name ist "sysname" mit einem Standardwert von NULL. Der Übereinstimmung von Wildcardmustern wird nicht unterstützt. Dieser Parameter oder der parameter @fktable_name oder beides muss angegeben werden.

[ @pktable_owner = ] N'pktable_owner'

Der Name des Besitzers der Tabelle (mit dem Primärschlüssel), der zum Zurückgeben von Kataloginformationen verwendet wird. Der Übereinstimmung von Wildcardmustern wird nicht unterstützt. Wenn @pktable_owner nicht angegeben ist, gelten die Standardtabellensichtsregeln des zugrunde liegenden Datenbankverwaltungssystems (DBMS).

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 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 = ] N'pktable_qualifier'

Der Name der Tabelle (mit dem Primärschlüssel)-Qualifizierer. 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 = ] N'fktable_name'

Der Name der Tabelle (mit einem Fremdschlüssel), der zum Zurückgeben von Kataloginformationen verwendet wird. @fktable_name ist "sysname" mit dem Standardwert "NULL. Der Übereinstimmung von Wildcardmustern wird nicht unterstützt. Dieser Parameter oder der parameter @pktable_name oder beides muss angegeben werden.

[ @fktable_owner = ] N'fktable_owner'

Der Name des Besitzers der Tabelle (mit einem Fremdschlüssel), der zum Zurückgeben von Kataloginformationen verwendet wird. @fktable_owner ist "sysname" mit dem Standardwert "NULL. Der Übereinstimmung von Wildcardmustern wird nicht unterstützt. Wenn @fktable_owner nicht angegeben ist, gelten die Standardtabellensichtsregeln der zugrunde liegenden DBMS.

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 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 = ] N'fktable_qualifier'

Der Name der Tabelle (mit einem Fremdschlüssel)-Qualifizierer. 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.

Resultset

Spaltenname Datentyp Beschreibung
PKTABLE_QUALIFIER sysname Der Name des Qualifizierers der Tabelle (mit dem Primärschlüssel). Dieses Feld kann sein NULL.
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 der TABLE_NAME zurückgegebenen Spalte. Dieses Feld gibt immer einen Wert zurück.
FKTABLE_QUALIFIER sysname Der Name des Qualifizierers der Tabelle (mit einem Fremdschlüssel). Dieses Feld kann sein NULL.
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 Name der Fremdschlüsselspalte für jede Spalte der TABLE_NAME zurückgegebenen. 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 Änderungen am Fremdschlüssel.
1 = NO ACTION ändert sich, wenn Fremdschlüssel vorhanden ist.
2 = SET_NULL
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 Änderungen am Fremdschlüssel.
1 = NO ACTION ändert sich, wenn Fremdschlüssel vorhanden ist.
2 = SET_NULL
3 = Standard festlegen
FK_NAME sysname Der Fremdschlüsselbezeichner. Dies gilt NULL nicht für die Datenquelle. SQL Server gibt den Einschränkungsnamen FOREIGN KEY zurück.
PK_NAME sysname Der Primärschlüsselbezeichner. Dies gilt NULL nicht für die Datenquelle. SQL Server gibt den Einschränkungsnamen PRIMARY KEY zurück.

Die zurückgegebenen Ergebnisse werden nach FKTABLE_QUALIFIER, , FKTABLE_OWNER, FKTABLE_NAMEund KEY_SEQ.

Hinweise

Anwendungscodierung, die Tabellen mit deaktivierten Fremdschlüsseln enthält, können mit den folgenden Methoden implementiert werden:

  • Vorübergehendes Deaktivieren der Einschränkungsüberprüfung (ALTER TABLE NOCHECK oder CREATE TABLE NOT FOR REPLICATION) beim Arbeiten mit den Tabellen, und aktivieren Sie sie später erneut.

  • Erzwingen Sie Beziehungen mithilfe von Triggern oder Anwendungscode.

Wenn der Primärschlüsseltabellenname angegeben wird und der Fremdschlüsseltabellenname lautet NULL, werden alle Tabellen zurückgegeben, sp_fkeys die einen Fremdschlüssel zur angegebenen Tabelle enthalten. Wenn der Name der Fremdschlüsseltabelle angegeben wird und der Primärschlüsseltabellenname lautet NULL, werden alle Tabellen zurückgegeben, sp_fkeys die mit einer Primärschlüssel-/Fremdschlüsselbeziehung zu Fremdschlüsseln in der Fremdschlüsseltabelle verknüpft sind.

Die sp_fkeys gespeicherte Prozedur 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 AdventureWorks2025-Datenbank abgerufen.

USE AdventureWorks2022;
GO

EXECUTE 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.

EXECUTE sp_fkeys @pktable_name = N'DimDate';