私たちの環境のデータベースは、2 つの異なる環境/アプリケーションによって共有されています。2 つのアプリケーションのうち、最初のアプリケーション A は頻繁に更新されますが、2 番目のアプリケーション B はそれほど頻繁には更新されません。
したがって、ここでの状況は、アプリケーション A が新しいコード (主にストアド プロシージャ) で更新されると、別のチームによって更新され、あまり頻繁に更新されない 2 番目のアプリケーション B に影響を与えて破損することがあります。これは正しい処理方法ではなく、両方の環境を一緒に更新しないと悲惨なことになる可能性があることを理解しています。これは、アプリケーション A と B が異なるチームによって処理されているために発生しています。
この状況をどのようにエレガントに処理しますか?
アプリケーション B から私が取ることができる予防策は次のとおりです - コードでデータを取得する - データを取得する際の最善の方法は、アプリケーション A によって新しい列が追加された場合にアプリケーション B によって無視されるように、空白/null 列をチェックすることです。 SQL でのデータの取得 - プロシージャ内では、オプションのパラメーターを使用して処理できます。
しかし、C# コードがプロシージャを呼び出すときは、param 値を渡す必要があり、新しいパラメータが追加されると、それが壊れます。呼び出しパラメーターが欠落している場合、(C# または SQL Server から) 無視する必要があることを確認する方法はありますか?
私の調査によると -
最初に sproc からパラメーターのリストを取得し、そのリストを使用してプロシージャを呼び出してループし、パラメーターが存在するかどうかを確認できます。そのため、アプリケーション A が新しいパラメーターを追加した場合でも、アプリケーション B によって自動的に処理されます。これは、C# の DeriveParameters または SQL クエリを使用してパラメーター リストを取得することで実行できます。
すべての SPROC を変更して、パラメーターを CSV 形式で受け取るようにします。SPROC でそれらを分割し、それに応じて使用します。これは、何百もの既存の sproc にとっては不十分に思えます。
繰り返しますが、私が言ったように、これは良い解決策とは思えません。もしあなたが同様の状況にあったとしたら、どのように異なった方法で対処したでしょうか? このシナリオを回避できるフレームワークはありますか?
環境 - ASP.NET/C# 4.0、SQL Server 2008 R2
編集 - 言い換えて、ここでもう少し詳細を説明しましょう。
アプリケーション/チーム A はコードを変更しますが、DB の変更ではなく、C# コードのみが本番環境にロールアウトされます。ここが違いです。また、DB コードは次のリリースでのみ導入されます。
アプリケーション/チーム B には最新のコードがありますが、DB の変更はまだ本番環境になく、まだ古いデータベースを使用しています。