SQL Server - 主キーの一覧を取得するクエリ

前回は外部キーの一覧を取得するクエリを書いてみました。

ichiroku11.hatenablog.jp

今回は外部キーのときと同じようにテーブル名やカラム名を含めて主キーの一覧を取得するクエリを書いてみました。

select
    i.name as [主キー名],
    ic.index_column_id as [主キーカラムID],
    t.name as [テーブル名],
    c.name as [カラム名]
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
    -- 主キーがあるテーブルとカラムをjoin
    inner join sys.tables as t
        on t.object_id = i.object_id
    inner join sys.columns as c
        on ic.object_id = c.object_id and ic.column_id = c.column_id
where i.is_primary_key = 1
order by [主キー名], [主キーカラムID];

主キーを作成すると対応するインデックス(クラスター化か非クラスター化)が自動的に作成されて、主キーを削除すると対応するインデックスも削除されるとのことなのでsys.indexesカタログビューを使っています。(主キー制約の一覧はsys.key_constraintsから取得できるようなのでもしかするとそっちを使ったほうがいいのかも?違いはあまりないかも?)

主キーカラムIDは単体の主キーでは常に1で、複合主キーのときに1、2・・・nという値になります。

参考