私のSQL Server 2008
場合stored procedure
、パラメータが多数あります。
それらの最初の部分はすべての呼び出しで使用され、2番目の部分のパラメーターはめったに使用されません。また、ロジックを2つの異なるストアドプロシージャに移動することはできません。
class
このすべてのパラメーターをまたはにカプセル化し、struct
それをストアドプロシージャパラメーターとして渡す方法はありますか?
使用できますかSQL CLR
。他の方法はありますか?
私のSQL Server 2008
場合stored procedure
、パラメータが多数あります。
それらの最初の部分はすべての呼び出しで使用され、2番目の部分のパラメーターはめったに使用されません。また、ロジックを2つの異なるストアドプロシージャに移動することはできません。
class
このすべてのパラメーターをまたはにカプセル化し、struct
それをストアドプロシージャパラメーターとして渡す方法はありますか?
使用できますかSQL CLR
。他の方法はありますか?
テーブル値パラメータを試しましたか?
実際、t-SQLで効果的かつ簡単に実行できるものにはCLR関数を使用しません。たとえば、前回CLR関数を使用したのは、t-SQLではかなり難しいと感じた複雑な正規表現に基づいて列を更新するためのものです。
各パラメータの値を指定する必要があることが懸念されているようです。あまり使用されないパラメーターにデフォルト値を割り当てるだけでうまくいくでしょうか(したがって、procが呼び出されるたびにすべてのパラメーターを渡す必要はありません)。
CLRタイプは(XMLのように)オプションになる可能性がありますが、そのルートをたどるのが良い考えかどうかはわかりません。
パラメータの量がアプリケーションで問題を引き起こしている場合は、次の2つの方法のいずれかを試すことができます。
1)すべてのパラメーターデータを含むXMLデータ型の単一パラメーターを渡します。次に、必要なものを解析できます。xml(Transact-SQL)を参照してください。
2)テーブルパラメータを作成します。テーブル値パラメータ(データベースエンジン)を参照してください。テーブルは次のとおりです。
ParameterName sysname
DataValue sql_variant
これらの方法のいずれかを使用すると、それらを再度使用するために、ローカル変数に展開する必要があります。