sp_fkeys (Transact-SQL)

返回当前环境的逻辑外键信息。该过程显示各种外键关系,包括禁用的外键。

主题链接图标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 的默认表可见性规则。

    如果未指定 @pktable_owner,则将仅搜索 dbo 架构。

  • [ @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 的默认表可见性规则。

    如果未指定 @fktable_owner,则将仅搜索 dbo 架构。

  • [ @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 更改(如果有外键)。

2=SET_NULL;将外键设置为 NULL。

DELETE_RULE

smallint

当 SQL 操作是删除操作时应用于外键的操作。对于这些列,SQL Server 将返回 0 或 1:

0=对外键的 CASCADE 更改。

1=NO ACTION 更改(如果有外键)。

2=SET_NULL;将外键设置为 NULL。

FK_NAME

sysname

外键标识符。如果不适用于数据源,则为 NULL。SQL Server 将返回 FOREIGN KEY 约束名称。

PK_NAME

sysname

主键标识符。如果不适用于数据源,则为 NULL。SQL Server 将返回 PRIMARY KEY 约束名称。

返回的结果集按 FKTABLE_QUALIFIERFKTABLE_OWNERFKTABLE_NAMEKEY_SEQ 排序。

备注

可以通过以下方法实现包含带禁用外键的表的应用程序编码:

  • 当使用这些表时,临时禁用约束检查(ALTER TABLE NOCHECK 或 CREATE TABLE NOT FOR REPLICATION),稍后再重新启用它。有关 NOT FOR REPLICATION 选项的详细信息,请参阅使用 NOT FOR REPLICATION 来控制约束、标识和触发器
  • 使用触发器或应用程序代码强制实施各种关系。

如果提供了主键表名,而外键表名为 NULL,则 sp_fkeys 将返回包含了给定表外键的所有表。如果提供了外键表名,而主键表名为 NULL,则 sp_fkeys 将返回通过主键/外键关系与外键表中的外键相关联的所有表。

sp_fkeys 存储过程与 ODBC 中的 SQLForeignKeys 功能相同。

权限

需要对架构的 SELECT 权限。

示例

以下示例将为 AdventureWorks 数据库中的 HumanResources.Department 表检索一个外键的列表。

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

请参阅

参考

目录存储过程 (Transact-SQL)
系统存储过程 (Transact-SQL)
sp_pkeys (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助