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

Sql server 获取数据库中所有主键的列表,sql-server,database,sql-server-2008,primary-key,Sql Server,Database,Sql Server 2008,Primary Key,这是获取数据库中所有主键列表的最佳方法,还是有更好的方法 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_SCHEM

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

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
观看

EXEC sp_pkeys“
执行sp_帮助约束“”
sp_pkeys将为每个 参与 的主键。这个 您可能最感兴趣的专栏 中有列名称和主键名称

sp_helpconstraint将列出所有 限制,包括 引用表的外键。 在第一个记录集中,将 只能是名为“对象名”的列 (有点没用,因为这就是 你通过了)。第二 结果集,将有以下内容 列:约束类型, 约束\u名称和约束\u键

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

如果您是从java执行此操作,还可以在databasemetadata对象中使用getPrimaryKeys方法。也许其他语言也有类似的方法来实现这一点。

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

select * from sys.key_constraints;

如果还需要数据类型信息,请执行以下操作:

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'

请选择一个更好的标题。“最好”是什么意思?你可能也可以使用@Identity,但我不知道这是否接近你的意思?信息模式确实是最好的方式。@cularis-RE:你建议的标签编辑
information\u schema
并不意味着
MySQL
。这些都是可移植的视图。厚颜无耻的,用不同的用户名发布相同的问题要添加到@Ashraf的响应中,您可以使用
选择对象名称(父对象id),*来自sys.key\u约束,其中type='PK'
。这将为具有主键的表提供表名及其主键名。为什么这是答案,它只对表而不是数据库起作用,这是问题的出发点此处引用的链接无效,但是您可以获取数据库中使用的所有表,并循环这些表以获取所有主密钥!我花了一个小时试图找到一个答案,这将允许我找到所有的PK不是int
select * from sys.key_constraints;
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'