SQL Server移行前後の件数確認クエリ集

システム開発
スポンサーリンク
スポンサーリンク

① 全ユーザーテーブルの正確な件数を取得する(推奨)

SELECT 
    s.name AS schema_name,
    t.name AS table_name,
    SUM(p.rows) AS row_count
FROM 
    sys.tables t
INNER JOIN      
    sys.schemas s ON t.schema_id = s.schema_id
INNER JOIN 
    sys.partitions p ON t.object_id = p.object_id
WHERE 
    p.index_id IN (0,1) -- 0: Heap, 1: Clustered Index
GROUP BY 
    s.name, t.name
ORDER BY 
    s.name, t.name;

✔ 特徴

  • 全テーブルを一括取得
  • スキーマ付きで出力
  • パーティションテーブルにも対応
  • 実務で最も使われる方法

② シンプルに各テーブルをCOUNT(*)する方法(最も正確)

SELECT COUNT(*) FROM dbo.TableName;

全テーブル分自動生成する場合:

SELECT 
    'SELECT ''' + s.name + '.' + t.name + ''' AS table_name, COUNT(*) AS row_count FROM [' 
    + s.name + '].[' + t.name + '];'
FROM 
    sys.tables t
JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
ORDER BY 
    s.name, t.name;

生成されたSQLを実行すればOKです。

✔ 特徴

  • 完全に正確
  • ただし大規模DBでは時間がかかる

③ 高速に概算件数を取得(メタデータ参照)

SELECT 
    OBJECT_SCHEMA_NAME(object_id) AS schema_name,
    OBJECT_NAME(object_id) AS table_name,
    SUM(row_count) AS row_count
FROM 
    sys.dm_db_partition_stats
WHERE 
    index_id IN (0,1)
GROUP BY 
    object_id
ORDER BY 
    schema_name, table_name;

✔ 特徴

  • 高速
  • 大規模DB向け
  • 通常は正確だが、統計更新タイミングで差異が出る可能性あり

④ 移行前後比較用フォーマット(おすすめ)

移行前・移行後それぞれでCSV出力してExcel比較が実務では一般的です。

比較しやすい形式:

SELECT 
    DB_NAME() AS database_name,
    s.name AS schema_name,
    t.name AS table_name,
    SUM(p.rows) AS row_count
FROM 
    sys.tables t
JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
JOIN 
    sys.partitions p ON t.object_id = p.object_id
WHERE 
    p.index_id IN (0,1)
GROUP BY 
    s.name, t.name
ORDER BY 
    s.name, t.name;

⑤ 差分チェック用(リンクサーバー使用例)

SELECT 
    A.schema_name,
    A.table_name,
    A.row_count AS before_count,
    B.row_count AS after_count,
    (B.row_count - A.row_count) AS diff
FROM 
    BeforeDB.dbo.TableCount A
JOIN 
    AfterDB.dbo.TableCount B
ON 
    A.schema_name = B.schema_name
    AND A.table_name = B.table_name
ORDER BY 
    A.schema_name, A.table_name;

実務での使い分け

方法 精度 速度 用途
COUNT(*) 厳密検証
sys.partitions 移行検証標準
dm_db_partition_stats 超大規模DB

現場でのおすすめ運用

  1. 移行前に件数取得 → CSV保存
  2. 移行後に同クエリ実行 → CSV保存
  3. ExcelやSQLで差分比較
  4. 差分があるテーブルのみ詳細検証

システム開発
スポンサーリンク
シェアする
tobotoboをフォローする

コメント

タイトルとURLをコピーしました