如果你愿意的话,我正在使用 SQL Server 并尝试做一些“反思”。我找到了系统视图sys.identity_columns
,其中包含我所有表的所有标识列。
但是,我需要能够选择有关不是标识列的主键的信息。是否存在包含有关所有主键且仅主键的数据的视图?如果没有,我还能如何获得这些数据?
如果你愿意的话,我正在使用 SQL Server 并尝试做一些“反思”。我找到了系统视图sys.identity_columns
,其中包含我所有表的所有标识列。
但是,我需要能够选择有关不是标识列的主键的信息。是否存在包含有关所有主键且仅主键的数据的视图?如果没有,我还能如何获得这些数据?
这适用于 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
SELECT name FROM sys.key_constraints WHERE type = 'PK';
SELECT name FROM sys.key_constraints WHERE type = 'UQ';
我意识到该问题已被标记为已回答,但它也可能有助于一些人展示如何将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'
试试这个...
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