Azure SQL Databaseで特定のSQL文を実行することで、各テーブルのレコード数とテーブル・インデックス情報をまとめて出力することができる。また、SSMS(SQL Server Management Studio)の「Generate Scripts」を利用して、テーブル定義を取得することもできる。

今回は、Azure SQL Database上の各テーブルのレコード数とテーブル・インデックス情報を取得してみたので、その手順を共有する。

前提条件

以下の記事に従って、Azure SQL Databaseの作成が完了していること。

Azure Potal上でSQLデータベースを作成してみたAzure Portal上では、常に最新の安定したバージョンの SQL Serverデータベースである「SQL データベース」が利用でき...

SQLによる各テーブルのレコード数とテーブル・インデックス情報の取得

SQLを利用して、各テーブルのレコード数とテーブル・インデックス情報を取得した結果は、以下の通り。

1) 各テーブルのレコード数を取得するSQLとその実行結果は、以下の通り。

SELECT t.name AS table_name, SUM(p.rows) AS cnt
FROM sys.tables t
JOIN sys.partitions p
  ON t.object_id = p.object_id
WHERE p.index_id IN (0, 1)
-- p.index_id
--   0: ヒープ(クラスター化インデックスのないテーブル)
--   1: クラスター化インデックス
GROUP BY t.name
SQLによる取得_1

2) いくつかのレコード数を個別に取得するSQLをその実行結果は以下の通りで、1) の結果と一致している。

SELECT COUNT(*) AS cnt_BATCH_JOB_EXECUTION FROM dbo.BATCH_JOB_EXECUTION;
SELECT COUNT(*) AS cnt_USER_ADDRESS FROM dbo.USER_ADDRESS;
SELECT COUNT(*) AS cnt_USER_DATA FROM dbo.USER_DATA;
SQLによる取得_2

3) 各テーブルのテーブル定義を取得するSQLとその実行結果は、以下の通り。今回は、特定のテーブル(USER_ADDRESS・USER_DATA)に限定している。

SELECT
    s.name AS SchemaName,
    t.name AS TableName,
    c.name AS ColumnName,
    type_name(c.user_type_id) AS DataType,
    c.max_length AS MaxLength,
    c.is_nullable AS IsNullable
FROM sys.columns c
INNER JOIN sys.tables t 
    ON c.object_id = t.object_id
INNER JOIN sys.schemas s
    ON t.schema_id = s.schema_id
WHERE t.name IN ( 'USER_ADDRESS', 'USER_DATA' )
ORDER BY SchemaName, TableName, c.column_id
SQLによる取得_3

4) 各テーブルのテーブル定義を個別に確認した結果は以下の通りで、3) の結果と一致している。
SQLによる取得_4

5) 各テーブルのインデックス情報を取得するSQLとその実行結果は、以下の通り。今回は、特定のテーブル(USER_ADDRESS・USER_DATA)に限定している。

SELECT
    i.name AS IndexName,
    i.type_desc AS IndexType,
    ic.key_ordinal AS ColumnPosition,
    t.name AS TableName,
    c.name AS ColumnName,
    ic.is_included_column AS IsIncludedColumn,
    i.is_unique AS IsUnique,
    i.is_primary_key AS IsPrimaryKey
FROM sys.indexes i
INNER JOIN sys.index_columns ic 
  ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns c 
  ON ic.object_id = c.object_id AND ic.column_id = c.column_id
INNER JOIN sys.tables t 
  ON i.object_id = t.object_id
WHERE
     t.name IN ( 'USER_ADDRESS', 'USER_DATA' )
ORDER BY
    i.name, ic.key_ordinal
SQLによる取得_5

6) 各テーブルのインデックス定義を個別に確認した結果は以下の通りで、5) の結果と一致している。
SQLによる取得_6

エンジニアファーストバナー

SSMS「Generate Scripts」を利用したテーブル定義の取得

SSMS(SQL Server Management Studio)上のメニュー「Generate Scripts」を利用することでも、テーブル定義を取得できる。その手順は、以下の通り。

1) SSMS上でテーブル定義を取得したいデータベースを選択し右クリックし、「Generate Scripts」を選択する。
Generate_Scripts_1

2) そのまま「Next」ボタンを押下する。
Generate_Scripts_2

3) 表示したいテーブルやユーザーを選択し、「Next」ボタンを押下する。なお、「Select entire database and all database objects」を指定すれば、データベース全体のテーブルやユーザー情報を出力できる。
Generate_Scripts_3

4) 出力結果の保存先を選択し、「Next」ボタンを押下する。ここでは、「Open in new query window」(新しいクエリウィンドウ上)を選択している。
Generate_Scripts_4

5) そのまま「Next」ボタンを押下する。
Generate_Scripts_5

6) 出力が完了すると以下の画面が表示されるため、「Finish」ボタンを押下する。
Generate_Scripts_6

7) 出力されたスクリプト内容は、以下の通り。なお、SSMS上で赤い警告が表示されるのは、既にUSER_ADDRESSテーブル・USER_DATAテーブルが存在するためである。
Generate_Scripts_7

/****** Object:  Table [dbo].[USER_ADDRESS]    Script Date: 2026/02/04 23:06:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON  
GO
CREATE TABLE [dbo].[USER_ADDRESS](
  [id] [int] IDENTITY(1,1) NOT NULL,
  [user_id] [int] NOT NULL,
  [user_key] [varchar](50) NOT NULL,
  [user_value] [nvarchar](1024) NULL,
 CONSTRAINT [PK_USER_ADDRESS] PRIMARY KEY CLUSTERED
(
  [id] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[USER_DATA]    Script Date: 2026/02/04 23:06:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[USER_DATA](
  [ID] [int] NOT NULL,
  [NAME] [nvarchar](40) NOT NULL,
  [BIRTH_YEAR] [int] NOT NULL,
  [BIRTH_MONTH] [int] NOT NULL,
  [BIRTH_DAY] [int] NOT NULL,
  [SEX] [char](1) NOT NULL,
  [MEMO] [nvarchar](1024) NULL,
PRIMARY KEY CLUSTERED
(
  [ID] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

要点まとめ

  • Azure SQL Databaseで特定のSQL文を実行することで、各テーブルのレコード数とテーブル・インデックス情報をまとめて出力することができる。
  • SSMS(SQL Server Management Studio)の「Generate Scripts」を利用して、テーブル定義を取得することもできる。