2010-09-19 26 views
3

我正在使用SQL Server,並嘗試做一點「反思」,如果你願意的話。我找到了系統視圖sys.identity_columns,其中包含我所有表格的所有標識列。SQL Server中是否存在僅列出主鍵的視圖?

不過,我需要能夠選擇有關主鍵是沒有標識列信息。是否有包含有關所有主鍵和唯一主鍵的數據的視圖?如果不是,我還能如何獲得這些數據?

回答

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 
+0

這是太棒了,謝謝。顯然我必須等待9分鐘才能接受你的答案,但我會。 – benjy 2010-09-19 23:03:04

+0

「但是,我需要能夠選擇不是標識列的主鍵的信息。」我認爲這個查詢不會完全滿足上述要求 – 2014-04-14 04:15:10

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 
相關問題