【SQL Server】全テーブル・全カラムの情報を一括取得する方法

【SQL Server】テーブルの情報を一覧で取得する

SQL Serverでテーブル一覧やカラム一覧をまとめて確認したいときに使うSQLを紹介します。

ユーザーテーブルの一覧だけなら、まずはsys.tablesを使うと分かりやすいです。この記事では、スキーマ名を含むテーブル一覧と、データ型・NULL許可などを含むカラム一覧を取得します。

対象になるのは、現在接続しているデータベースです。実行前に、SSMSなどの接続先と対象データベースを確認してください。

テーブルを一覧で取得する

テーブル名とスキーマ名を一覧で取得するSQLです。sys.tablesは、データベース内のユーザーテーブルの情報を返します。

コピーしました!

SQL
-- 現在のデータベースにあるユーザーテーブルの一覧
SELECT
    DB_NAME() AS database_name,
    s.name AS schema_name,
    t.name AS table_name
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
    ON s.schema_id = t.schema_id
ORDER BY
    s.name,
    t.name;

実行結果

実行するとこのような情報が取得できます。

1つのテーブルにつき、1行ずつ表示されます。

条件を加えて抽出する

例えば、dboスキーマのテーブルだけを確認したい場合は、次のように絞り込みます。

コピーしました!

SQL
-- dboスキーマのユーザーテーブルだけを取得
SELECT
    DB_NAME() AS database_name,
    s.name AS schema_name,
    t.name AS table_name
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
    ON s.schema_id = t.schema_id
WHERE s.name = N'dbo'
ORDER BY
    s.name,
    t.name;

dboの部分は、確認したいスキーマ名に変更してください。さらにテーブル名で絞り込みたい場合は、WHERE句の次の行に「AND t.name = N’Person’」のような条件を追加します。

テーブル名とカラムの情報もまとめて取得する

カラム名やデータ型まで確認したい場合は、sys.tables、sys.columns、sys.typesを組み合わせます。

下記のSQLは、そのまま実行するとユーザーテーブルのカラム一覧を取得します。最初の2つの変数を変更すれば、スキーマ名とテーブル名で絞り込めます。

コピーしました!

SQL
-- NULLのままなら絞り込みなし
DECLARE @SchemaName sysname = NULL;
DECLARE @TableName  sysname = NULL;

SELECT
    DB_NAME() AS database_name,
    s.name AS schema_name,
    t.name AS table_name,
    c.column_id,
    c.name AS column_name,
    ts.name AS type_schema_name,
    ty.name AS data_type,
    c.max_length AS max_length_bytes,
    c.precision,
    c.scale,
    c.is_nullable,
    c.is_identity,
    c.is_computed
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
    ON s.schema_id = t.schema_id
INNER JOIN sys.columns AS c
    ON c.object_id = t.object_id
INNER JOIN sys.types AS ty
    ON ty.user_type_id = c.user_type_id
INNER JOIN sys.schemas AS ts
    ON ts.schema_id = ty.schema_id
WHERE
    (@SchemaName IS NULL OR s.name = @SchemaName)
    AND (@TableName IS NULL OR t.name = @TableName)
ORDER BY
    s.name,
    t.name,
    c.column_id;

実行結果

実行するとこのような情報が取得できます。

上記ではテーブル名を指定しましたが、他にも色々な情報を指定できます。指定できる情報の詳細はMicrosoft公式のページでご確認ください。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA