型が違ったり、桁数が違ったりする列ってちらほら出てきますよね。
発見するのが難しかったりするのでSQLを作成しました。
SELECT DISTINCT COL1.TABLE_NAME AS テーブル名 ,( select b.value from sys.tables a left join sys.extended_properties b on a.object_id = b.major_id and a.parent_object_id = b.minor_id where a.name =COL1.TABLE_NAME) AS テーブル説明 , COL1.COLUMN_NAME AS 列名 , COL1.DATA_TYPE AS 型 , COL1.CHARACTER_MAXIMUM_LENGTH AS 文字桁 , COL1.NUMERIC_PRECISION AS 整数桁 , COL1.NUMERIC_SCALE AS 小数桁 , COL1.IS_NULLABLE AS NULL許容 , COMMENT.COLUMN_COMMENT AS 列説明 FROM INFORMATION_SCHEMA.COLUMNS COL1 -- コメントを取得 INNER JOIN( select t.name as TABLE_NAME ,c.name as COLUMN_NAME ,ep.value as COLUMN_COMMENT from sys.tables t ,sys.columns c ,sys.extended_properties ep where t.object_id = c.object_id and c.object_id = ep.major_id and c.column_id = ep.minor_id) COMMENT ON COMMENT.TABLE_NAME = COL1.TABLE_NAME AND COMMENT.COLUMN_NAME = COL1.COLUMN_NAME -- 列の情報が食い違うもの LEFT JOIN INFORMATION_SCHEMA.COLUMNS COL2 ON COL1.COLUMN_NAME = COL2.COLUMN_NAME AND (COL1.DATA_TYPE <> COL2.DATA_TYPE OR COL1.CHARACTER_MAXIMUM_LENGTH <> COL2.CHARACTER_MAXIMUM_LENGTH OR COL1.NUMERIC_PRECISION <> COL2.NUMERIC_PRECISION OR COL1.NUMERIC_SCALE <> COL2.NUMERIC_SCALE ) WHERE ( -- 列のコメントが食い違うもの ( select COUNT(distinct ep.value )--c.name AS COLUMN_NAME from sys.tables t ,sys.columns c ,sys.extended_properties ep where t.object_id = c.object_id and c.object_id = ep.major_id and c.column_id = ep.minor_id and c.name = COL1.COLUMN_NAME group by c.name ) > 1 -- 列の情報が食い違うもの のJOIN がヒットした OR COL2.COLUMN_NAME IS NOT NULL ) -- 列名指定する場合はここに条件 --WHERE COL1.COLUMN_NAME = 'HIN_CD' ORDER BY COL1.COLUMN_NAME ASC
実行すると修正の必要性がある列のみ抽出されます。
Oracleでも似たようなの作っておくと便利!
※ちなみにSQLはインデントなどちゃんと直してません。
0 件のコメント:
コメントを投稿