sp_fkeys (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 作業是更新時,外部索引鍵所套用的動作。 SQL Server 會針對這些資料行傳回 0 或 1: 0=外部索引鍵的 CASCADE 變更。 1=如果外部索引鍵存在,則是 NO ACTION 變更。 |
DELETE_RULE |
smallint |
當 SQL 作業是刪除時,外部索引鍵所套用的動作。 SQL Server 會針對這些資料行傳回 0 或 1: 0=外部索引鍵的 CASCADE 變更。 1=如果外部索引鍵存在,則是 NO ACTION 變更。 |
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 權限。
範例
下列範例會擷取 AdventureWorks2012 資料庫之 HumanResources.Department 資料表的外部索引鍵清單。
USE AdventureWorks2012;
GO
EXEC sp_fkeys @pktable_name = N'Department'
,@pktable_owner = N'HumanResources';