sp_fkeys (Transact-SQL)
適用於:Microsoft Fabric 中的 SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) 倉儲
傳回目前環境的邏輯外鍵資訊。 此程式會顯示外鍵關聯性,包括停用的外鍵。
語法
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' ]
[ ; ]
引數
[ @pktable_name = ] N'pktable_name'
具有主鍵的數據表名稱,用來傳回目錄資訊。 @pktable_name為 sysname,預設值為 NULL
。 不支援通配符模式比對。 必須提供此參數或 @fktable_name 參數或兩者。
[ @pktable_owner = ] N'pktable_owner'
用來傳回目錄信息的數據表擁有者名稱(含主鍵)。 @pktable_owner為 sysname 預設值為 NULL
。 不支援通配符模式比對。 如果未 指定@pktable_owner ,則會套用基礎資料庫管理系統 (DBMS) 的預設數據表可見性規則。
在 SQL Server 中,如果目前用戶擁有具有指定名稱的數據表,則會傳回該數據表的數據行。 如果未指定@pktable_owner,且目前用戶沒有擁有具有指定@pktable_name的數據表,則程式會尋找具有資料庫擁有者所擁有之指定@pktable_name的數據表。 如果存在,則會傳回該數據表的數據行。
[ @pktable_qualifier = ] N'pktable_qualifier'
數據表的名稱(含主鍵)限定符。 @pktable_qualifier為 sysname 預設值為 NULL
。 各種 DBMS 產品支援數據表的三部分命名(qualifier.owner.name)。 在 SQL Server 中,限定符代表資料庫名稱。 在某些產品中,它代表數據表資料庫環境的伺服器名稱。
[ @fktable_name = ] N'fktable_name'
用來傳回目錄信息的數據表名稱(具有外鍵)。 @fktable_name為 sysname,預設值為 NULL
。 不支援通配符模式比對。 必須提供此參數或 @pktable_name 參數或兩者。
[ @fktable_owner = ] N'fktable_owner'
用來傳回目錄資訊之數據表的擁有者名稱(具有外鍵)。 @fktable_owner為 sysname,預設值為 NULL
。 不支援通配符模式比對。 如果未 指定@fktable_owner ,則會套用基礎 DBMS 的預設數據表可見性規則。
在 SQL Server 中,如果目前用戶擁有具有指定名稱的數據表,則會傳回該數據表的數據行。 如果未指定@fktable_owner,且目前用戶沒有擁有具有指定@fktable_name的數據表,則程式會尋找具有資料庫擁有者所擁有之指定@fktable_name的數據表。 如果存在,則會傳回該數據表的數據行。
[ @fktable_qualifier = ] N'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 = SET_NULL 3 = 設定預設值 |
DELETE_RULE |
smallint | 當 SQL 作業為刪除時,套用至外鍵的動作。 可能的值:0 = CASCADE 變更為外鍵。1 = NO ACTION 如果存在外鍵,就會變更。2 = SET_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';