none
現在のDBスキーマと、新しいスキーマをゼロから定義するDDL(CREATE文)から、DBスキーマを更新したい RRS feed

  • 質問

  • SQLServer2012を使用しています。
    データモデリングにEnterpriseArchitectというツールを使っており、このツールはDDL(CREATE文)を生成できるため、これを使って開発用DBを構築しています。
    しかし、途中でスキーマに変更があった場合、EnterpriseArchitectが生成するDDLはCREATE文なので、そのままでは更新できません。
    先にDROP TABLEしてしまえば良いのですが、それだとデータが消えてしまいます。

    可能な限り、データを消さずにスキーマを更新したいのですが、このEnterpriseArchitectが生成するCREATE文をうまく活用する方法はありますか?
    ManagementStudioにそのような機能があったりすると、とても助かるのですが・・・
    よろしくお願いします。
    2015年5月15日 4:39

回答

  • 「既存テーブルはレイアウトが変わらない」という前提付きですが、
    ManagmentStudioのスクリプト出力でデータのみを出しておいてあとで実行してみては?

    ManagmentStudioで該当データベースを右クリック
    =>タスク
      =>スクリプトの生成
        =>詳細設定
    とし、下記イメージの様にして出力すればINSERT文のみが出力されます。

    万能ではありませんが、案として

    • 回答としてマーク femp 2015年5月19日 1:46
    2015年5月15日 6:17
  • 既存テーブルのテーブル名変更

    テーブルの新規作成

    既存テーブルからのデータコピー

    既存テーブルの削除

    ・・・って順番でやれば問題ないかと。

    ALTER TABLEも内部的にやっていることは大差ないので。


    甕星

    • 回答としてマーク femp 2015年5月19日 1:46
    2015年5月16日 1:08
  • Open DBDiff という2つのDB間のスキーマの比較をするツールがあります。

    https://opendbiff.codeplex.com/

    なので、EnterprizeArchitectで吐き出したCREATE文を別のDBにつくって比較すれば良いと思います。
    差分を取るときにSQL文も出してくれるので、それを実行すればよい、
    はずなのですが、多分そのまま実行すると、いろいろエラーが出ると思います。
    が、どの辺が違っているのかはSQL文みればわかるとおもいますので
    それだけでも結構楽だと思います。
    • 回答としてマーク femp 2015年5月19日 1:46
    2015年5月18日 2:31

すべての返信

  • 「既存テーブルはレイアウトが変わらない」という前提付きですが、
    ManagmentStudioのスクリプト出力でデータのみを出しておいてあとで実行してみては?

    ManagmentStudioで該当データベースを右クリック
    =>タスク
      =>スクリプトの生成
        =>詳細設定
    とし、下記イメージの様にして出力すればINSERT文のみが出力されます。

    万能ではありませんが、案として

    • 回答としてマーク femp 2015年5月19日 1:46
    2015年5月15日 6:17
  • 既存テーブルのテーブル名変更

    テーブルの新規作成

    既存テーブルからのデータコピー

    既存テーブルの削除

    ・・・って順番でやれば問題ないかと。

    ALTER TABLEも内部的にやっていることは大差ないので。


    甕星

    • 回答としてマーク femp 2015年5月19日 1:46
    2015年5月16日 1:08
  • Open DBDiff という2つのDB間のスキーマの比較をするツールがあります。

    https://opendbiff.codeplex.com/

    なので、EnterprizeArchitectで吐き出したCREATE文を別のDBにつくって比較すれば良いと思います。
    差分を取るときにSQL文も出してくれるので、それを実行すればよい、
    はずなのですが、多分そのまま実行すると、いろいろエラーが出ると思います。
    が、どの辺が違っているのかはSQL文みればわかるとおもいますので
    それだけでも結構楽だと思います。
    • 回答としてマーク femp 2015年5月19日 1:46
    2015年5月18日 2:31
  • みなさんありがとうございます。

    教えて頂いた方法を色々試してみます。

    2015年5月19日 1:46