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'