- Products -


Software


NEWS


Special



- Knowledge -


Category × Tag



- Like -

公開
作成日:2022/11/21 14:01:25
更新日:2022/11/21 15:01:42

【SQLServer】テーブル構造の差異を確認する方法

・VisualStudioでSSDTを使ってスキーマ全体を比較することもできるが時間が掛かる。
・対象とするテーブルに対し、サクッと比較を行いたい時に使える方法を示す。
・例えば、検証環境と本番環境の差を確認したい時等に利用できる。

手順


・以下に示す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


Category



Tag




関連記事


{{tmp.name}}

{{article.category}} {{article.title}}