获取数据库中所有主键的列表

psa*_*sam 14 database sql-server primary-key sql-server-2008

这是获取数据库中所有主键列表的最佳方法 - 还是有更好的方法?

SELECT
KCU.TABLE_NAME AS Table_Name,
KCU.CONSTRAINT_NAME AS Constraint_Name,
KCU.COLUMN_NAME AS COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
ON KCU.CONSTRAINT_SCHEMA = TC.CONSTRAINT_SCHEMA
AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
AND KCU.TABLE_SCHEMA = TC.TABLE_SCHEMA
AND KCU.TABLE_NAME = TC.TABLE_NAME
WHERE
TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY
KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.CONSTRAINT_NAME
Run Code Online (Sandbox Code Playgroud)

小智 41

USE databasename; 

GO

SELECT i.name AS IndexName, OBJECT_NAME(ic.OBJECT_ID) AS TableName, 
       COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.OBJECT_ID = ic.OBJECT_ID
AND i.index_id = ic.index_id
WHERE i.is_primary_key = 1
Run Code Online (Sandbox Code Playgroud)

此查询将从数据库中提取所有主键约束...您只需要执行此查询并在第一行键入数据库名称


Ash*_*ada 9

以下语法为您提供了正在使用的数据库中的所有约束.

select * from sys.key_constraints;
Run Code Online (Sandbox Code Playgroud)

  • 要添加@Ashraf的响应,可以使用`select OBJECT_NAME(parent_object_id),*来自sys.key_constraints,其中type ='PK'`.这将为您提供具有主键的表的表名及其主键名. (5认同)

Jmo*_*y38 7

如果您还需要数据类型信息:

SELECT 
    so.name 'Table Name',
    c.name 'Column Name',
    t.Name 'Data type',
    c.max_length 'Max Length',
    c.precision ,
    c.scale ,
    c.is_nullable,
    ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM    
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN 
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN 
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
INNER JOIN 
    sysobjects so ON c.object_id = so.id
WHERE
    i.is_primary_key = 1 and 
    so.xtype = 'U'
Order By 'Table Name', 'Column Name'
Run Code Online (Sandbox Code Playgroud)


Hai*_*vgi 5

链接

EXEC sp_pkeys '<tablename>'
EXEC sp_helpconstraint '<tablename>'
Run Code Online (Sandbox Code Playgroud)

sp_pkeys将为参与的主键的每一列返回一行。您可能最感兴趣的列是COLUMN_NAME和PK_NAME。

sp_helpconstraint将列出的所有约束,包括引用该表的外键。在第一个记录集中,将仅存在一个称为“对象名称”的列(有点用处,因为这就是您传入的内容)。在第二个结果集中,将包含以下列:constraint_type,constraint_name和constraint_keys。

  • 为什么这是答案,它仅针对表而不是数据库,这就是问题的初衷 (8认同)
  • 此处引用的链接无效 (2认同)