sp_fkeys (Transact-SQL)
适用于:Microsoft Fabric 中的 SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) Warehouse
返回当前环境的逻辑外键信息。 此过程显示各种外键关系,包括禁用的外键。
语法
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_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';