Teilen über


sp_fkeys (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics 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 = ] 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. @pktable_owner ist "sysname" mit der Standardeinstellung "NULL. 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. @pktable_qualifier ist "sysname" mit der Standardeinstellung "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 = ] 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. @fktable_qualifier ist "sysname" mit der Standardeinstellung "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.

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