読者です 読者をやめる 読者になる 読者になる

データベース間でテーブルの作成状況を比較

SQLServer

こことかこことかここによれば、データベースSOMEDBv1内のテーブル名一覧は下記のクエリで取得可能。

USE SOMEDBv1
SELECT name FROM sysobjects WHERE xtype = 'U'

これの応用で、例えばアプリケーションのバージョンが上がったりしたときとかにバージョン1のデータベースからバージョン2のデータベースに漏れなくコンバート出来てるかチェックするのにテーブル名一覧を比較するときのクエリはこんな感じ。

SELECT V1.name
FROM SOMEDBv1..sysobjects V1
LEFT JOIN SOMEDBv2..sysobjects V2 ON V1.name = V2.name AND V2.xtype = 'U'
WHERE V1.xtype = 'U' AND V2.name IS NULL
ORDER BY V1.name

SQL Server Management Studioでデータベースを右クリック→タスク(T)→スクリプトの生成(E)...で作成したオブジェクト一括作成のスクリプト同士を比較すれば良さそう感じなんですが、差分が多すぎてWinDiffで見てもWinMergeで見てもうまく把握できなかったんです。(;_;)