sp_pkeys (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的仓库

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

Transact-SQL 语法约定

语法

-- Syntax for SQL Server, Azure SQL Database, Azure Synapse Analytics, Parallel Data Warehouse  
  
sp_pkeys [ @table_name = ] 'name'       
    [ , [ @table_owner = ] 'owner' ]   
    [ , [ @table_qualifier = ] 'qualifier' ]  

参数

[ @table_name= ] 'name'
要为其返回信息的表。 name 为 sysname,无默认值。 不支持通配符模式匹配。

[ @table_owner= ] 'owner'
为指定的表指定所有者。 owner 为 sysname,默认值为 NULL。 不支持通配符模式匹配。 如果未指定所有者,则遵循基础 DBMS 的默认表可见性规则。

在 SQL Server 中,如果当前用户拥有一个具有指定名称的表,则返回该表的列。 如果未指定所有者,且当前用户未拥有指定名称的表,则该过程查找由数据库所有者拥有的具有指定名称的表。 如果存在这样的表,则返回该表的列。

[ @table_qualifier= ] 'qualifier'
表限定符。 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 与 ODBC 中的 SQLPrimaryKeys 等价。 返回的结果按 TABLE_QUALIFIER、TABLE_OWNER、TABLE_NAME 和 KEY_SEQ 排序。

权限

需要对架构的 SELECT 权限。

示例

以下示例检索 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';  

另请参阅

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