データベースプロジェクトにて、非スキーマスクリプトを管理する方法
問題
チーム内でのデータベース管理に、データベースプロジェクトを利用しています。
ですが、よくあるマスタデータの挿入については、手作業で管理をしていました。
Insert文を書いたクエリファイルを、共有フォルダに置くなり、メールに添付するなりして、
「このファイル実行しておいてねー」とチームで共有していました…。
これでは実行が面倒ですし、新しくデータベースを作成する際に、手間がかかります。
マスタデータなどの重要なスクリプトが、バージョン管理されていないのも問題です。
解決方法
データベースプロジェクトには、最初から配置前・配置後スクリプトが準備されています。(中身は空です。)
その配置後スクリプトに、マスタデータ挿入スクリプトを追加します。
これで、バージョン管理が可能になり、配置の際にスクリプトを実行してくれます。
データベースプロジェクトとは
VisualStudio 2010 の標準プロジェクトテンプレートです。
機能は
- データベースをバージョン管理できる
- 他の人が変更した内容を、自分のローカル環境に簡単に反映できる
- 配置済のデータベースと、プロジェクトのデータベースの差分をスクリプトとして生成してくれたりする
- etc...
などがあります。
データベース プロジェクトの概要
全体の流れ
マスタデータ挿入などの非スキーマスクリプトを、”配置後スクリプト”に記述します。
記述した後、配置を行います。結果として、データベースにマスタデータが挿入されます。
配置後スクリプト
1. スクリプトを作成する
データベースプロジェクトには、Scriptフォルダがあります。
- Post-Deploymentフォルダ→配置後スクリプトを置く場所、
- Pre-Deploymentフォルダ→配置前スクリプトを置く場所
各フォルダには、すでに空のスクリプトファイルが追加されています。
配置後に実行して欲しいスクリプトを、追加します。
今回は、Post-DeploymentフォルダのMasterフォルダに、Genders.sqlを追加しました。
2.実行スクリプトを指定する
追加しただけでは実行してくれません。
Script.PostDeployment.sqlに先程追加したスクリプトのファイル名を記述します。
sqlcmdなので、エラーがでるかもしれません。
データ>Transact-Sqlデータ>SQL CMDモードを選択するとおさまります。
だが断る。
...が、このままでは問題があります。
配置は、スキーマ変更の際などで頻繁に実行されるものです。
一方、マスタデータの挿入は、1回実行されれば充分です。
特にマスタデータは一意制約がある場合がほとんど。
2回目の配置からは、エラーがおきます。
解決方法は2つあります。
- 1. 2度目は実行しないスクリプト、再実行スクリプトとしてSQLをかく
- 2. スクリプト自体を実行しないようにする
…新規プロジェクトでは可能かもしれませんが、1.はほぼ無理です。
マイクロソフトチームの解決方法
VisualStudioホワイトペーパーの、
データベースプロジェクトガイト日本語の93ページによると、
日付を基準に、スクリプトの追加を制御するルーチンを開発して解決したそうです。
…そんなんできん…
ということで、私の場合は、チームの方にお願いして、
コメントアウトで制御することにしました。
おしまい
他に良い方法がありましたら、教えて下さい。お願いします。
今日の内容は、
データベースプロジェクトガイト日本語の
89ページ〜93ページに、とてもわかりやすく載っています!
明日は朝飛行機でWDDに向かいます!ヽ(゚∀゚)ノ ワー