・対象とするテーブルに対し、サクッと比較を行いたい時に使える方法を示す。
・例えば、検証環境と本番環境の差を確認したい時等に利用できる。
手順
・以下に示すSQLをそれぞれで実行。
・結果をtxtファイルで保存する。
・そのtxtをWinMerge等の比較ツールで比較する。
・差分を確認して適切な対応を行う。
使い方
WITH
-----------------------------------------------------
--テーブル名取得("対象とするデータベース名")
-----------------------------------------------------
main_table AS
(
SELECT
tbl.TABLE_NAME
FROM
"対象とするデータベース名".INFORMATION_SCHEMA.TABLES tbl
WHERE
tbl.TABLE_TYPE = 'BASE TABLE'
AND tbl.TABLE_NAME Like '%対象とするテーブル名%'
)
-----------------------------------------------------
--列名取得("対象とするデータベース名")
-----------------------------------------------------
,main_column AS
(
SELECT
col.TABLE_NAME
,col.COLUMN_NAME
,CASE WHEN col.IS_NULLABLE = 'NO' THEN 'NOT NULL'
ELSE 'NULL'
END AS IS_NULLABLE
,col.DATA_TYPE
,col.CHARACTER_MAXIMUM_LENGTH
,col.NUMERIC_PRECISION
,col.NUMERIC_SCALE
,col.DATETIME_PRECISION
FROM
"対象とするデータベース名".INFORMATION_SCHEMA.COLUMNS col
LEFT JOIN
"対象とするデータベース名".INFORMATION_SCHEMA.TABLES tbl
ON
tbl.TABLE_NAME = col.TABLE_NAME
WHERE
tbl.TABLE_TYPE = 'BASE TABLE'
AND tbl.TABLE_NAME Like '%対象とするテーブル名%'
)
-----------------------------------------------------
--主キー取得("対象とするデータベース名")
-----------------------------------------------------
,main_pkey AS
(
SELECT
ccu.TABLE_NAME
,ccu.COLUMN_NAME
FROM
"対象とするデータベース名".INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
WHERE ccu.TABLE_NAME Like '%対象とするテーブル名%'
)
--SELECT * FROM main_table
SELECT * FROM main_column
ORDER BY TABLE_NAME, COLUMN_NAME