sp_pkeys (Transact-SQL)

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

返回当前环境中单个表的主键信息。

Transact-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_namesysname,没有默认值。 不支持通配符模式匹配。

[ @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,默认值为 NULL. 各种 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_QUALIFIERTABLE_OWNERTABLE_NAMEKEY_SEQ

权限

需要对架构的 SELECT 权限。

示例

本文中的 Transact-SQL 代码示例使用 AdventureWorks2022AdventureWorksDW2022 示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。

以下示例检索 HumanResources.Department 数据库中 AdventureWorks2022 表的主键。

USE AdventureWorks2022;
GO

EXEC sp_pkeys @table_name = N'Department',
    @table_owner = N'HumanResources';

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

以下示例检索 DimAccount 数据库中 AdventureWorksPDW2012 表的主键。 它返回零行,指示表没有主键。

-- Uses AdventureWorksPDW

EXEC sp_pkeys @table_name = N'DimAccount';