指定したカラム名を持つテーブルを検索する
データベース内の指定したカラム名を持つテーブルを検索するには?
一度出来上がったシステムの分析や改修などをする時、案外活躍するのが 「キーワードでストアドプロシージャなどを検索する」クエリーや、今回ご紹介する「指定したカラム名を持つテーブルを検索する」 クエリーです。
指定したカラム名を持つテーブルを検索する
指定したカラム名を持つテーブルを検索するには何通りか方法がありますが、以下のクエリを使って、指定したカラム名を持つテーブルの名前をリストすることができます。
SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, T.name AS TableName, C.name AS ColumnName FROM sys.tables AS T INNER JOIN sys.columns AS C ON T.object_id = C.object_id WHERE C.name = 'カラム名' ORDER BY SchemaName, TableName, ColumnName;
sys.tables はデータベース内のユーザーが定義したテーブルオブジェクトを返すオブジェクトカタログビューです。
sys.columns はカラムを持つオブジェクト(テーブル、ビュー等)のカラム情報を返すオブジェクトカタログビューです。
sys.columns の object_id は、そのカラムが属するオブジェクトの object_id なので、そのカラムを使って sys.tables と内部結合し、テーブル名とカラム名を取得しています。
もちろん LIKE を使って、以下のようにカラム名の一部を指定することも可能です。
SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, T.name AS TableName, C.name AS ColumnName FROM sys.tables AS T INNER JOIN sys.columns AS C ON T.object_id = C.object_id WHERE C.name LIKE '%キーワード%' ORDER BY SchemaName, TableName, ColumnName;