SQL Server中是否有一个视图仅列出主键?

3
我正在使用SQL Server并尝试进行一些“反射”。我找到了系统视图sys.identity_columns,其中包含了所有表的自增列。
但是,我需要能够选择不是自增列的主键信息。是否有一个包含所有主键数据且仅限于主键的视图?如果没有,我该如何获取这些数据?
4个回答

7

以下适用于 SQL Server 2005 及更高版本:

select OBJECT_SCHEMA_NAME(i.object_id), OBJECT_NAME(i.object_id), i.name
from sys.indexes i
where i.is_primary_key = 1
order by 1, 2, 3

这太棒了,谢谢。显然我需要等待9分钟来接受你的答案,但我会的。 - benjy
然而,我需要能够选择关于非标识列主键的信息。我认为这个查询无法满足上述要求。 - Ranadeera Kantirava

3
SELECT name FROM sys.key_constraints WHERE type = 'PK';
SELECT name FROM sys.key_constraints WHERE type = 'UQ';

1

我知道这个问题已经被标记为已回答,但是对于一些人来说,展示如何将sys.index_columns(除了sys.indexes)纳入查询中以将实际的主键索引与表的列绑定可能也会有所帮助。例如:

select
    t.Name as tableName
    ,c.name as columnName
    ,case when pk.is_primary_key is not null then 1 else 0 end as isPrimaryKeyColumn
from sys.tables t
inner join sys.columns c on t.object_id = c.object_id
left join sys.index_columns pkCols 
    on t.object_id = pkCols.object_id 
    and c.column_id = pkCols.column_id
left join sys.indexes pk 
    on pkCols.object_id = pk.object_id 
    and pk.is_primary_key = 1
where 
    t.name = 'MyTable'

1
尝试一下这个...
SELECT KC.TABLE_NAME, KC.COLUMN_NAME, KC.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE KC
WHERE OBJECTPROPERTY(OBJECT_ID(KC.CONSTRAINT_NAME), 'IsPrimaryKey') = 1
AND COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接