SSMSでDBのテーブル設計を別DBにコピーする
2020-12-14
azblob://2022/11/11/eyecatch/2020-12-14-ssms-copy-db-tables-000.jpg

この記事は FIXER Advent Calendar 2020 (https://adventar.org/calendars/5587) 14日目の記事です。

前日の記事は大野さんの「cloud.config Virtual Desktop(ccVD)~ 2020まとめ ~」でした。

相変わらずDB触りたがりのなむゆです。最近はDP-300の取得を目指して講座受けたりSQL Databaseの面白そうな機能を触ってみたりしてます。で、今回はそんなSQL Databaseのテーブル設計のお話です。

DBスキーマをコピーしたくなること、あるよね

開発環境、ステージング環境、本番環境みたいに複数の環境を用意するとき、あるいはスキーマを変えたいけど開発環境も壊したくないので手元でDB建てて動作確認したいときってありますよね。
その時について回るのがDBのスキーマやデータをどうやってコピーするかという問題です。
方法はDBMSやソフトウェアなどによっていろいろありますが、AzureのSQL DatabaseでDBスキーマを複製する場合、SSMSを用いた簡単な方法が一つあります。

SSMSで簡単に既存DBからCREATE TABLE文を自動生成

というわけでこちらにさっくり2つDBを用意しました。namuyutestがすでにスキーマの用意されたコピー元のDB,namuyutest2がコピー先のDBになります。
現在はSSMSを開いてDBに接続した状態になります。

テーブルはこんな感じで適当に作っています。
これらのテーブルのスキーマを`namuyutest2テーブルにコピーしていきます。

まずはコピー元DBを右クリックして「スクリプトの生成」を選択します。

「次へ」

ここでも「次へ」

ここでは「新しいクエリウィンドウで開く」をチェックした状態で「次へ」

「次へ」を押すとクエリの生成が始まります。

しばらくするとクエリウィンドウにクエリが生成されます。

この中で画像1枚目の赤線から上、画像2枚目の赤線から下はAzureのSQL Databaseの作成クエリなので、今回は使用しないため削除しておきます。

残った部分をコピーして、コピー先のnamuyutest2のDBを右クリックしてクエリウィンドウを開きます。

開いたクエリウィンドウにクエリをペーストして実行すると・・・

このようにスキーマがコピーできました。

このやり方はDBを設計したときのクエリが残っていないときやSSMS上などでクエリに残していない変更を行った場合でも使えるのが利点です。
今回は紹介していませんが詳細設定の「スクリプトを作成するデータの種類」をデータとスキーマの両方にすればテーブルにデータを挿入するINSERT文も生成してくれるのでデータの持越しも可能です。
・・・あまりデータ量が多いとその分時間がかかるのであまりお勧めはできないのですが。
詳しくは参考欄のリンクにもあるので、一度覗いてみてください。

幸せなクリスマスを!

参考