sp_fkeys (Transact-SQL)

适用于:Microsoft Fabric 中的 SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) Warehouse

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

Transact-SQL 语法约定

语法

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 中,如果当前用户拥有具有指定 name 的表,则返回该表的列。 如果未指定@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 中,如果当前用户拥有具有指定 name 的表,则返回该表的列。 如果未指定@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_QUALIFIERFKTABLE_OWNERFKTABLE_NAMEKEY_SEQ

注解

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

  • 在处理表时暂时禁用约束检查(ALTER TABLE NOCHECKCREATE TABLE NOT FOR REPLICATION),然后稍后再次启用它。

  • 使用触发器或应用程序代码强制实施各种关系。

如果提供主键表名称并且外键表名称为 NULLsp_fkeys 则返回包含给定表外键的所有表。 如果提供了外键表名称,并且主键表名称为 NULLsp_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';