1

私は同僚の開発者のSQLコードを分析しています。私は完全に間違っているかもしれませんが、彼らがやったことは私には良くないようです。ユーザー定義関数を作成するストアドプロシージャを作成することをお勧めしますか?

デザインは動的式ビルダーのためのものです。式はいくつかのテーブルを使用して格納され、システムが動作します。私に関係するシステムの側面は、式レコードが格納されるとストアドプロシージャが呼び出され、式全体を1つの関数として展開するUDFを作成するということです。

その意味は、作成されたユニークな式ごとに、その式を実行する一意のUDFが実行されることです。私はこれが実行されていると仮定しているので、動的SQLを構築して毎回実行するのではなく、実行計画をキャッシュしてパフォーマンスを向上させることができます。

あなたはどう思いますか、それは容認できる解決策のようですか?もっと情報が必要ですか?

+0

もっと詳しい情報が必要です。これが私だったら、おそらくCLRアセンブリを検討していたかもしれませんが、それはあなたのソリューションを作成したチームのためのオプションではないかもしれません。どのバージョンのSQL Server?ソリューションは他のアプリケーションでどのように使用されていますか? – Yuck

+0

SQL Server 2008 R2。このコンサルタントが離れると誰もコードを維持できないという事実のため、おそらくCLRは実行可能な選択肢ではありません。私はCLRが現時点では大変売りに出ているのを見ていますが、良い選択肢になることに同意します。この時点で他のアプリケーションでこのソリューションを使用する予定はありません。 –

答えて

3

これは私にとって災難のレシピのように聞こえます。主な理由は、誰かが戻ってUDFをクリーンアップした場合です(一度しか使用されない場合、「実行計画」のアイデアがショットされている場合を除きます)。そして、あなたがきれいにしないと、特に長い時間が経過した後で、使用されていない多くの混乱が生じます。

さらに読むと、UDFが何らかの形でメタデータとして格納されているように聞こえますが、これは少し上手く聞こえますが、複数のUDFを作成する際の余計なことを考えれば、パフォーマンスは問題ですか?

+0

パフォーマンスは実際問題ではありません。私は、開発者とUDFを使用するかどうかについて長い議論を重ねてきましたが、それはレポート作成者が要求する松葉杖のようなものです。私は100%推論を理解するとは言いませんが、要件収集のしくみを知っています。私たちは時には固執し、それが最良の方法ではないことを認識した後に解けることができない解決策を提案します。できるだけ多くの要求から「どのように」いかに努力し続けるかのもう一つの理由。 –

関連する問題