アプリケーションを配布するための私のお気に入りのアプローチは、実際には社内で構築されたバージョン管理とデータベースです。
データベースの拡張プロパティを使用して、現在のディスク上にデプロイされたスキーマ バージョンを保存し、次に、ディスク上のバージョン => アップグレード スクリプトから次のバージョンへのマップを維持する内部アップグレード アレイを実行します。起動時に、アプリは、ディスク上のバージョンが現在のアプリのバージョンと一致するまで、アップグレード アレイ内のステップを実行します。したがって、アップグレードはすべての中間バージョンを通過します。新しいサイト (新しい場所) の展開は、すべてのスキーマ バージョンを通過し、使用されなくなったオブジェクトを作成および削除することがあります。これは奇妙に思えるかもしれませんが、最終的には、以前にリリースされたどのバージョンでもアプリケーションをデプロイできます。クライアントが 3 年前のスキーマを持っていて、誰もがその内容を忘れていたとしても、アプリはそれを常に最新の状態にする方法を知っています。これは素晴らしいことです。
テストが可能で、アップグレード時に実行される正確な手順をより適切に制御できるため、差分比較ツール (VS DB プロジェクト統合など) よりもこのアプローチを好みます。差分ツールは、テーブルのコピーや名前の変更など、あらゆる種類の疑わしいアクションを実行しますが、これは +1 TB を測定する展開では機能しません (これは私のアプリが対処する必要があります)。
予想されるデータ サイズがかなり小さい (<100 Gb) 場合は、差分ベースのツールを検討します。vsdbcmdに基づく VS DB プロジェクトの展開は、このような状況で正常に機能します。また、展開ターゲットが 1 つの場所 (つまり、ターゲットが 1 つしかない Web アプリ、Web サイト db) の場合、以前のバージョンをアップグレードする機能は魅力を失います。