适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统 (PDW)
Microsoft Fabric
中的仓库Microsoft Fabric 中的 SQL 数据库
返回当前环境中单个表的主键信息。
语法
SQL Server、Azure SQL 数据库、Azure Synapse Analytics、Analytics Platform System(PDW)的语法。
sp_pkeys
[ @table_name = ] N'table_name'
[ , [ @table_owner = ] N'table_owner' ]
[ , [ @table_qualifier = ] N'table_qualifier' ]
[ ; ]
参数
[ @table_name = ] N'table_name'
指定要为其返回信息的表。 @table_name 为 sysname,没有默认值。 不支持通配符模式匹配。
[ @table_owner = ] N'table_owner'
为指定的表指定所有者。
@table_owner为 sysname,默认值为 NULL. 不支持通配符模式匹配。 如果未 指定@table_owner ,则应用基础数据库管理系统(DBMS)的默认表可见性规则。
在 SQL Server 中,如果当前用户拥有一个具有指定名称的表,则返回该表的列。 如果未指定@table_owner,并且当前用户不拥有具有指定@table_name的表,则此过程将查找具有数据库所有者拥有的指定@table_name的表。 如果存在这样的表,则返回该表的列。
[ @table_qualifier = ] N'table_qualifier'
表限定符。
@table_qualifier为 sysname. 各种 DBMS 产品支持表的三部分命名(<qualifier>.<owner>.<name>)。 在 SQL Server 中,此列表示数据库名称。 在某些产品中,它表示表所在数据库环境的服务器名称。
返回代码值
无。
结果集
| 列名称 | 数据类型 | 描述 |
|---|---|---|
TABLE_QUALIFIER |
sysname | 表限定符的名称。 此字段可以是 NULL. |
TABLE_OWNER |
sysname | 表所有者的名称。 此字段始终返回值。 |
TABLE_NAME |
sysname | 表的名称。 在 SQL Server 中,该列表示在 sysobjects 表中列出的表名。 此字段始终返回值。 |
COLUMN_NAME |
sysname | 返回的每个列 TABLE_NAME 的列的名称。 在 SQL Server 中,此列表示表中列出的 sys.columns 列名。 此字段始终返回值。 |
KEY_SEQ |
smallint | 多列主键中列的序列号。 |
PK_NAME |
sysname | 主键标识符。 如果不适用于数据源,则 NULL 返回。 |
注解
sp_pkeys 返回有关使用约束显式定义的 PRIMARY KEY 列的信息。 由于不是所有的系统均支持显式命名的主键,因此由网关实现者决定主键的构成。 术语主键是指表的逻辑主键。 每个列为逻辑主键的键应为其定义唯一索引。 此唯一索引也返回在 sp_statistics.
sp_pkeys存储过程等效于 SQLPrimaryKeys ODBC。 结果按 TABLE_QUALIFIER、 TABLE_OWNER、 TABLE_NAME和 KEY_SEQ。
权限
需要对架构的 SELECT 权限。
示例
本文中的代码示例使用 AdventureWorks2025 或 AdventureWorksDW2025 示例数据库,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。
以下示例检索 HumanResources.Department 数据库中 AdventureWorks2025 表的主键。
USE AdventureWorks2022;
GO
EXECUTE sp_pkeys
@table_name = N'Department',
@table_owner = N'HumanResources';
示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
以下示例检索 DimAccount 数据库中 AdventureWorksPDW2012 表的主键。 它返回零行,指示表没有主键。
-- Uses AdventureWorksPDW
EXECUTE sp_pkeys @table_name = N'DimAccount';