Azure SQL Databaseで各テーブルのレコード数とテーブル定義を取得してみた
Azure SQL Databaseで特定のSQL文を実行することで、各テーブルのレコード数とテーブル・インデックス情報をまとめて出力することができる。また、SSMS(SQL Server Management Studio)の「Generate Scripts」を利用して、テーブル定義を取得することもできる。
今回は、Azure SQL Database上の各テーブルのレコード数とテーブル・インデックス情報を取得してみたので、その手順を共有する。
前提条件
以下の記事に従って、Azure SQL Databaseの作成が完了していること。
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

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;

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

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

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
6) 各テーブルのインデックス定義を個別に確認した結果は以下の通りで、5) の結果と一致している。


SSMS「Generate Scripts」を利用したテーブル定義の取得
SSMS(SQL Server Management Studio)上のメニュー「Generate Scripts」を利用することでも、テーブル定義を取得できる。その手順は、以下の通り。
1) SSMS上でテーブル定義を取得したいデータベースを選択し右クリックし、「Generate Scripts」を選択する。

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

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

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

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

/****** 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」を利用して、テーブル定義を取得することもできる。







