Sdílet prostřednictvím


sp_fkeys (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsPdW (Analytics Platform System)Sklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Vrací logické informace o cizím klíči pro aktuální prostředí. Tento postup ukazuje vztahy cizích klíčů včetně deaktivovaných cizích klíčů.

Transact-SQL konvence syntaxe

Syntaxe

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

Arguments

[ @pktable_name = ] N'pktable_name'

Název tabulky s primárním klíčem slouží k vrácení katalogových informací. @pktable_name je sysname s výchozím nastavením NULL. Wildcard pattern matching není podporován. Tento parametr nebo parametr @fktable_name , případně obojí, musí být dodány.

[ @pktable_owner = ] N'pktable_owner'

Jméno vlastníka tabulky (s primárním klíčem) používané k vrácení informací z katalogu. @pktable_owner je sysname s výchozím nastavením NULL. Wildcard pattern matching není podporován. Pokud @pktable_owner není specifikováno, platí výchozí pravidla pro viditelnost tabulek základního databázového systému (DBMS).

V SQL Serveru, pokud aktuální uživatel vlastní tabulku s tímto jménem, sloupce této tabulky se vrátí. Pokud @pktable_owner není specifikováno a aktuální uživatel nevlastní tabulku s daným @pktable_name, procedura hledá tabulku s určeným @pktable_name vlastněným vlastníkem databáze. Pokud existuje, sloupce této tabulky se vrátí.

[ @pktable_qualifier = ] N'pktable_qualifier'

Název kvalifikátoru tabulky (s primárním klíčem). @pktable_qualifier je sysname s výchozím nastavením NULL. Různé produkty DBMS podporují třídílné pojmenování tabulek (qualifier.owner.name). V SQL Serveru kvalifikátor představuje název databáze. V některých produktech představuje název serveru databázového prostředí tabulky.

[ @fktable_name = ] N'fktable_name'

Název tabulky (s cizím klíčem) použitý k vrácení informací z katalogu. @fktable_name je sysname s výchozím nastavením NULL. Wildcard pattern matching není podporován. Tento parametr nebo @pktable_name parametr, případně obojí, musí být dodány.

[ @fktable_owner = ] N'fktable_owner'

Jméno vlastníka tabulky (s cizím klíčem) se používá k vrácení informací z katalogu. @fktable_owner je sysname s výchozím nastavením NULL. Wildcard pattern matching není podporován. Pokud @fktable_owner není specifikováno, platí výchozí pravidla viditelnosti tabulek v základním DBMS.

V SQL Serveru, pokud aktuální uživatel vlastní tabulku s tímto jménem, sloupce této tabulky se vrátí. Pokud @fktable_owner není specifikováno a aktuální uživatel nevlastní tabulku s daným @fktable_name, procedura hledá tabulku s určeným @fktable_name vlastněným vlastníkem databáze. Pokud existuje, sloupce této tabulky se vrátí.

[ @fktable_qualifier = ] N'fktable_qualifier'

Název kvalifikátoru tabulky (s cizím klíčem). @fktable_qualifier je sysname s výchozím nastavením NULL. V SQL Serveru kvalifikátor představuje název databáze. V některých produktech představuje název serveru databázového prostředí tabulky.

Hodnoty návratového kódu

Žádné.

Sada výsledků

Název sloupce Datový typ Description
PKTABLE_QUALIFIER sysname Název kvalifikátoru tabulky (s primárním klíčem). Toto pole může být .NULL
PKTABLE_OWNER sysname Název vlastníka tabulky (s primárním klíčem). Toto pole vždy vrací hodnotu.
PKTABLE_NAME sysname Název tabulky (s primárním klíčem). Toto pole vždy vrací hodnotu.
PKCOLUMN_NAME sysname Název sloupců primárních klíčů pro každý sloupec vráceného klíče TABLE_NAME . Toto pole vždy vrací hodnotu.
FKTABLE_QUALIFIER sysname Název kvalifikátoru tabulky (s cizím klíčem). Toto pole může být .NULL
FKTABLE_OWNER sysname Název majitele stolu (s cizím klíčem). Toto pole vždy vrací hodnotu.
FKTABLE_NAME sysname Název tabulky (s cizím klíčem). Toto pole vždy vrací hodnotu.
FKCOLUMN_NAME sysname Název sloupce cizího klíče pro každý sloupec vráceného klíče TABLE_NAME . Toto pole vždy vrací hodnotu.
KEY_SEQ smallint Pořadové číslo sloupce v primárním klíči s více sloupci. Toto pole vždy vrací hodnotu.
UPDATE_RULE smallint Akce aplikovaná na cizí klíč při aktualizaci SQL operace. Možné hodnoty:
0 = CASCADE Změny cizího tónu.
1 = NO ACTION změní, pokud je přítomen cizí klíč.
2 = SET_NULL
3 = výchozí nastavení
DELETE_RULE smallint Akce aplikovaná na cizí klíč, když je SQL operace smazáním. Možné hodnoty:
0 = CASCADE Změny cizího tónu.
1 = NO ACTION změní, pokud je přítomen cizí klíč.
2 = SET_NULL
3 = nastavit výchozí nastavení
FK_NAME sysname Identifikátor cizího klíče. Pokud ne, je NULL to relevantní pro datový zdroj. SQL Server vrací FOREIGN KEY název omezení.
PK_NAME sysname Identifikátor primárního klíče. Pokud ne, je NULL to relevantní pro datový zdroj. SQL Server vrací PRIMARY KEY název omezení.

Výsledky vrácené jsou uspořádány podle FKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAME, a KEY_SEQ.

Poznámky

Kódování aplikací zahrnující tabulky s deaktivovanými cizími klíči lze implementovat následujícími metodami:

  • Dočasné vypnutí kontroly omezení (ALTER TABLE NOCHECK nebo CREATE TABLE NOT FOR REPLICATION) při práci s tabulkami a pak ji později znovu zapnutí.

  • Používání triggerů nebo aplikačního kódu k vynucení vztahů.

Pokud je zadán název primární klíčové tabulky a název tabulky cizích klíčů je , NULLsp_fkeys vrátí všechny tabulky, které obsahují cizí klíč do dané tabulky. Pokud je zadán název tabulky cizích klíčů a název primární klíčové tabulky je , NULLsp_fkeys vrátí všechny tabulky spojené vztahem primárního klíče/cizího klíče cizím klíčem cizí klíče v tabulce cizích klíčů.

Uložená sp_fkeys procedura je ekvivalentní SQLForeignKeys v ODBC.

Povolení

Vyžaduje SELECT povolení ke schématu.

Examples

Následující příklad získává seznam cizích klíčů pro tabulku HumanResources.Department v databázi AdventureWorks2025 .

USE AdventureWorks2022;
GO

EXECUTE sp_fkeys
    @pktable_name = N'Department',
    @pktable_owner = N'HumanResources';

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

Následující příklad získává seznam cizích klíčů pro tabulku DimDate v databázi AdventureWorksPDW2012 . Žádné řádky nejsou vráceny, protože Azure Synapse Analytics nepodporuje cizí klíče.

EXECUTE sp_fkeys @pktable_name = N'DimDate';