製品の更新プログラムをインストールするときに、SQL サーバー データベースをどのように更新しますか? Windows インストーラーと統合するツールはありますか? 私の典型的なスキーマの変更は次のとおりです。
- 列の追加/削除
- テーブルの追加/削除。
- ビューの追加。
- インデックスの追加/変更。
製品の更新プログラムをインストールするときに、SQL サーバー データベースをどのように更新しますか? Windows インストーラーと統合するツールはありますか? 私の典型的なスキーマの変更は次のとおりです。
私の経験では、インストール時ではなく、ソフトウェアがデータベースに接続するときに db スキーマの更新を行う方が適切です。次のことを行います。
これは、実行中のコード内から実行するのに十分簡単ですが、インストーラーで実行するのはそれほど簡単ではありません。
Adam Cogan は、最初のリリース以降のすべての更新を記録するために使用されるパッチ テーブルを作成することを推奨しています。SSMS または Enterprise Manager を介してスキーマを変更する代わりに、変更ごとにスクリプトを作成するようにしてください。どちらのアプリケーションでも、変更をスクリプト化して適用することはできません。スクリプトをファイルに保存し (おそらくリソースとして追加します)、アプリケーションを実行するたびにパッチ テーブルを確認します。
Adam には、SQL データベースを改善するためのルールがいくつかあります。
http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterSQLServerDatabases.aspx
InstallShieldでは、インストールの一部として SQL スクリプトを実行できます。試したことはありませんが、前回見たときは GUI にあったことを覚えておいてください。
SubSonic の移行を調べてみてください。まず、DB をバージョン管理するための優れた方法です。次に、まったく同じスクリプトをインストーラーから実行する方法を理解するのはそれほど難しくありません。
ソフトウェアのバージョンごとに、データベースの更新がたくさんあると思います。これらの更新プログラムを T-SQL 命令として記述し、ソフトウェアの新しいバージョンが最初に起動されたときにテスト実行してみませんか? ソフトウェアからデータベースへの接続を開き、SELECT または UPDATE 命令を送信するのと同じように DDL 命令を送信するだけです。また、Jack Paulsen が提案するものと同様のことを行います。これらの T-SQL 命令のリストを二重の識別システムで維持します。1 つはそれが適用されるデータベース/ソフトウェア バージョンにリンクされており (uniqueIdentifier である可能性があります)、もう 1 つは適用される (uniqueIdentifier になる可能性があります)。命令を連続した順序で保持します(私の例を参照してください:命令2は命令1の前に実行できません)
例:
//instruction 1, batch instructions for version#2.162
USE myDatabase
GO
ALTER TABLE myTable
ADD myColumn uniqueIdentifier Null
GO
//instruction 2, batch instructions for version#2.162
USE myDatabase
ALTER TABLE myTable
ADD CONSTRAINT myTable_myColumn FOREIGN KEY (myColumn) ...
GO
ALTER、DROP、および CREATE 命令の詳細については、T-SQL ヘルプを参照してください。そのフィールドを削除する前に、(たとえば) フィールドにリンクされたインデックスと制約を削除するように注意してください。
もちろん、いくつかの追加の UPDATE 命令を追加して、追加された列などの値を計算することもできます。
以前のアップグレード手順 (データベース バージョン #2.161 への移行) が正しく実行されたかどうかを確認する、もっと複雑なことを考えることもできます。
私のアドバイス: これらの T-SQL 命令を記述するときは、それらの "対応する部分" のトレースも保持して、いつでも (デバッグ時などに) データベース構造を以前のバージョンにダウングレードできるようにします。