私はアーロン(そして受け入れられた答え)に同意しなければなりません。
アーロンのアプローチは、メンテナンススクリプトなど、「DBAのこと」を扱うのが好きな方法です。ユーザーデータベースから呼び出されるライブラリ関数を使用してこれを実行したくありません。
どうして?あなたはDLL Hellに相当するデータベースに向かいます。
互換性のないバージョン
... Windows 2000より前のバージョンでは、COMクラステーブルがすべてのユーザーとプロセスで共有されていたため、Windowsはこれに対して脆弱でした。1つのDLL / EXE内の1つのCOMオブジェクトのみが、システム上で特定のグローバルCOMクラスIDを持つと宣言できます。プログラムがそのクラスのインスタンスを作成する必要がある場合は、現在中央に登録されている実装を取得しました。その結果、共通オブジェクトの新しいバージョンをインストールするプログラムをインストールすると、以前にインストールされていた他のプログラムが意図せず壊れることがあります。
.net 2.0アプリケーションを実行しているサーバーに.net 4.5をインストールするとどうなりますか?何もありません。アプリケーションは2.0フレームワークを引き続き使用します。3つのアプリケーションデータベースをホストしているサーバーでLastIndexOf関数を更新し(そのうちの1つへのアップグレードの一部として)、何が起こりますか?3つすべてが最新バージョンを使用しています。
別の方法は、SQL#で採用されているアプローチです。これは各ユーザーデータベースのスキーマにインストールされるため、Application-Yの安定性を危険にさらすことなく、Application-Xのデータベースを安全にアップグレードできます。
厳しく管理された変更管理環境で作業している場合、選択の余地はありません。コンポーネントのすべてのコンシューマーをテストしないと、共有コンポーネントをアップグレードできません。もう少し「速くて緩い」場所で作業している場合は、パッチ/アップグレードで意図せず何かを壊す可能性があります。