この日記はVisual Studio Advent Calendar 2015の12/8分の記事です。
Visual Studio Advent Calendar 2014 - Qiita
みなさんはデータベースの開発にどんなものを使われているでしょうか?本番機と検証機のスキーマやデータ比較どうしているでしょう?いちいちSQLを書いて比較したりしていませんか?
ストアドプロシージャの開発や、データの定義を行うのにSQL Server Management Studio(SSMS)もいいですが、どうせならVisual Studioに統合されたSQL Server Data Tools(SSDT)を使ってみましょう。SSMSと同様のIntellisenseとともにソース管理もサポートされるので、大変便利です。
新規プロジェクトからSQL Serverを選んでSQL Serverデータベースプロジェクトを選びます。ほかのプロジェクト同様、この時点でソース管理に追加することも可能です。
プロジェクトにはSQL Serverでサポートされている多くのテーブル、SQL CLR、サーバーオブジェクトを追加することができます。
プロジェクトのプロパティでターゲットのSQL Serverのバージョンを指定可能です。異なるバージョンのSQL Serverではスキーマの比較ができないので、気を付けてください。
テーブルの設計はGUI以外にも普通にテキストで編集可能です。Intellisenseももちろん対応しています。
インデックスもこのように右ペインから追加可能です。
作ったデータベースは右クリックからデータベースに発行可能です。LocalDB、SQL ServerいずれもOKです。
発行先はプロファイルに名前を付けて保存することにより、複数の発行先を使い分けることが可能です。
データベースもいつものインターフェースで指定します。
データベース発行時の注意点として、発行時にデータが消失するような更新は抑止されています。もしも問題ない場合、「データ損失が発生する場合に増分配置をブロック」のチェックを外してください。
データベース発行後、以前のデータベースの後処理をする場合、「配置後スクリプト」を使用します。
普通のSQLの他、既存のSQLをインポートすることも可能です。差分処理に使ってください。
データベース開発をしている場合の一番厄介な点はスキーマの差分がわかりづらいこと。SSDTはそういうためにデータやスキーマの差分を調べる機能があります。
対象データベースを選択して、比較情報を設定します。
ソース(開発用)とターゲット(本番)を指定します。
比較対象を選択します。今回はテーブルのみです。
すると追加したレコードが表示されます。
こんな風にレコードの中もわかります。「ターゲットの更新」をクリックすると、データの同期が行われます。スキーマの比較も可能です。
こんな風にスキーマに変更を追加しました。
データの比較同様に、スキーマの比較を選択します。
こんな風に比較するスキーマの差分がわかります。スキーマ比較の場合、SQL Serverのバージョンが一致していないとエラーが出るようです。発行前にデータベースプロェクトの設定を忘れずに。
Visual Studio と程よく統合されていて、便利なので、ぜひ使ってください。今回は描きませんでしたが、Visual Studio と統合されているため、ソース管理も便利です。