SQLServerでテーブル名と主キーの一覧を取得する
スポンサーリンク
SQLServerでテーブル名と主キー(PRIMARY KEY )の一覧を取得する方法についてです。
ただ単に取得するだけでなく、テーブル毎に主キーをまとめて,区切りにしています。
(複数行の列をグループ化)
1行にまとめるのはOracleであれば、LISTAGG関数を使うことでできるみたいですね。
今回はSQLServerなので、別の方法を使っています。
ちょっと冗長な書き方になってしまっているので、もう少し綺麗にしたいところではあります。
SELECT A.table_name ,( SELECT sub.caramu_name + ',' FROM ( select t.name as table_name, c.name as caramu_name 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 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 ) AS sub WHERE sub.table_name = A.table_name FOR XML PATH('') ) AS name_concat FROM ( select t.name as table_name, c.name as caramu_name 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 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 ) AS A GROUP BY table_name
上記のクエリ作成にあたり下記サイトを参考にさせていただきました。
ichiroku11.hatenablog.jp