这是获取数据库中所有主键列表的最佳方式 - 还是有更好的方法?
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
答案 0 :(得分: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
此查询将从数据库中提取所有主键约束... 你只需要执行这个查询并在第一行输入数据库名称
答案 1 :(得分:8)
以下语法为您提供了正在使用的数据库中的所有约束。
select * from sys.key_constraints;
答案 2 :(得分:4)
查看link
EXEC sp_pkeys '<tablename>'
EXEC sp_helpconstraint '<tablename>'
sp_pkeys将为每个返回一行 参与的列 主键。该 您可能最感兴趣的列 在COLUMN_NAME和PK_NAME中。
sp_helpconstraint将列出所有 约束,包括 引用该表的外键。 在第一个记录集中,会有 只是一个名为Object Name的列 (有点无用,因为那是什么 你过去了)。在第二 结果集,将有以下内容 columns:constraint_type, constraint_name和constraint_keys。
答案 3 :(得分:2)
如果您还想要数据类型信息:
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'
答案 4 :(得分:0)
如果您是从java执行此操作,则还可以在databasemetadata对象中使用getPrimaryKeys方法。也许其他语言也有类似的方法。