sp_fkeys (Transact-SQL)

適用于: Microsoft Fabric 中的 SQL Server Azure SQL Database Azure SQL 受控實例 Azure Synapse Analytics Analytics Platform System (PDW)倉儲

傳回目前環境的邏輯外鍵資訊。 此程式會顯示外鍵關聯性,包括停用的外鍵。

Transact-SQL 語法慣例

語法

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

引數

[ @pktable_name= ] ' pktable_name '
這是資料表的名稱,其中包含用來傳回目錄資訊的主鍵。 pktable_name sysname ,預設值為 Null。 不支援萬用字元模式比對。 必須提供此參數或 fktable_name 參數或兩者。

[ @pktable_owner= ] ' pktable_owner '
這是用來傳回目錄資訊的資料表擁有者名稱(主鍵)。 pktable_owner為 sysname ,預設值為 Null。 不支援萬用字元模式比對。 如果未 指定pktable_owner ,則會套用基礎 DBMS 的預設資料表可見度規則。

在 SQL Server 中,如果目前使用者擁有具有指定名稱的資料表,則會傳回該資料表的資料行。 如果未 指定pktable_owner ,且目前使用者沒有擁有具有指定pktable_name 的資料表,則程式會尋找具有資料庫擁有者所擁有之指定 pktable_name 的資料表。 如果存在,則會傳回該資料表的資料行。

[ @pktable_qualifier =] ' pktable_qualifier '
這是資料表的名稱(含主鍵)限定詞。 pktable_qualifier 為 sysname,預設值為 Null。 各種 DBMS 產品支援資料表的三部分命名( qualifier.owner.name )。 在 SQL Server 中,限定詞代表資料庫名稱。 在某些產品中,它代表資料表資料庫環境的伺服器名稱。

[ @fktable_name= ] ' fktable_name '
這是用來傳回目錄資訊之資料表的名稱(具有外鍵)。 fktable_name為 sysname,預設值為 Null。 不支援萬用字元模式比對。 必須提供此參數或 pktable_name 參數或兩者。

[ @fktable_owner =] ' fktable_owner '
這是用來傳回目錄資訊的資料表擁有者名稱(具有外鍵)。 fktable_owner sysname ,預設值為 Null。 不支援萬用字元模式比對。 如果未 指定fktable_owner ,則會套用基礎 DBMS 的預設資料表可見度規則。

在 SQL Server 中,如果目前使用者擁有具有指定名稱的資料表,則會傳回該資料表的資料行。 如果未 指定fktable_owner ,且目前使用者沒有擁有具有指定fktable_name 的資料表,則程式會尋找具有資料庫擁有者所擁有之指定 fktable_name 的資料表。 如果存在,則會傳回該資料表的資料行。

[ @fktable_qualifier= ] ' fktable_qualifier '
這是資料表的名稱(具有外鍵)限定詞。 fktable_qualifier sysname ,預設值為 Null。 在 SQL Server 中,限定詞代表資料庫名稱。 在某些產品中,它代表資料表資料庫環境的伺服器名稱。

傳回碼值

結果集

資料行名稱 資料類型 描述
PKTABLE_QUALIFIER sysname 資料表的名稱(含主鍵)限定詞。 此欄位可以是 Null。
PKTABLE_OWNER sysname 資料表的名稱(含主鍵)擁有者。 此欄位一律會傳回值。
PKTABLE_NAME sysname 資料表的名稱(含主鍵)。 此欄位一律會傳回值。
PKCOLUMN_NAME sysname 傳回TABLE_NAME之每個資料行的主鍵資料行名稱。 此欄位一律會傳回值。
FKTABLE_QUALIFIER sysname 資料表的名稱(具有外鍵)限定詞。 此欄位可以是 Null。
FKTABLE_OWNER sysname 資料表的名稱(具有外鍵)擁有者。 此欄位一律會傳回值。
FKTABLE_NAME sysname 資料表的名稱(具有外鍵)。 此欄位一律會傳回值。
FKCOLUMN_NAME sysname 傳回TABLE_NAME每個資料行的外鍵資料行名稱。 此欄位一律會傳回值。
KEY_SEQ smallint 多欄主鍵中資料行的序號。 此欄位一律會傳回值。
UPDATE_RULE smallint 當 SQL 作業為更新時,套用至外鍵的動作。 可能的值:
0=CASCADE 變更為外鍵。
1=如果外鍵存在,則 NO ACTION 會變更。
2 = 設定 Null
3 = 設定預設值
DELETE_RULE smallint 當 SQL 作業為刪除時,套用至外鍵的動作。 可能的值:
0=CASCADE 變更為外鍵。
1=如果外鍵存在,則 NO ACTION 會變更。
2 = 設定 Null
3 = 設定預設值
FK_NAME sysname 外鍵識別碼。 如果不適用於資料來源,則為 Null。 SQL Server 會傳回 FOREIGN KEY 條件約束名稱。
PK_NAME sysname 主鍵識別碼。 如果不適用於資料來源,則為 Null。 SQL Server 會傳回 PRIMARY KEY 條件約束名稱。

傳回的結果會依FKTABLE_QUALIFIER、FKTABLE_OWNER、FKTABLE_NAME和KEY_SEQ來排序。

備註

包含已停用外鍵之資料表的應用程式撰寫程式碼可透過下列方式實作:

  • 使用資料表時,暫時停用條件約束檢查(ALTER TABLE NOCHECK 或 CREATE TABLE NOT FOR REPLICATION),然後稍後再加以啟用。

  • 使用觸發程式或應用程式程式碼來強制執行關聯性。

如果提供主鍵資料表名稱且外鍵資料表名稱為 Null,sp_fkeys會傳回包含指定資料表外鍵的所有資料表。 如果提供外鍵資料表名稱且主鍵資料表名稱為 Null,sp_fkeys傳回與外鍵資料表中外鍵關聯性相關的所有資料表。

sp_fkeys預存程式相當於 ODBC 中的 SQLForeignKeys。

權限

SELECT需要架構的許可權。

範例

下列範例會擷 HumanResources.Department 取資料庫中資料表 AdventureWorks2022 的外鍵清單。

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

範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

下列範例會擷 DimDate 取資料庫中資料表 AdventureWorksPDW2012 的外鍵清單。 不會傳回任何資料列,因為 Azure Synapse Analytics 不支援外鍵。

EXEC sp_fkeys @pktable_name = N'DimDate';  

另請參閱

目錄預存程式 (Transact-SQL)
系統預存程序 (Transact-SQL)
sp_pkeys (Transact-SQL)