2011-01-14 2 views
0

テーブル値のUDFのパラメータに「アサート」を作成する方法はありますか?テーブル値UDFのパラメータをアサートする

パフォーマンス上の理由からテーブル値のUDFを使用したいと思っていますが、特定のパラメータの組み合わせ(開始日と終了日が1か月以上離れているなど)によって、すべてのユーザーのサーバーでパフォーマンスの問題が発生することがわかっています。

エンドユーザーは、UDFを使用してExcel経由でデータベースにクエリを実行します。 UDF(および特にテーブル値のUDF)は、データがExcel用に大きすぎる場合に便利です。ユーザーは、データをグループに分類して行数を減らす簡単なSQL照会を作成します。例えば、ユーザは毎時の集合体ではなく毎週の集合体に興味があるかもしれない。ユーザーはSELECTステートメントでグループを作成して、行を24x7 = 168回減らします。私はマルチステートメントUDFにRAISERRORステートメントを書くことができますが、テーブル値UDFはクエリオプティマイザに統合されているため、これらのクエリはテーブル値UDFでより効率的です。

したがって、テーブル値のUDFに渡されるパラメータにアサーションを定義できますか?

答えて

1

簡単な答えはありません - 単一の文TVFは1つの文だけを含むことができます。

いくつかの方法があります。一つはWHERE句を拡張することにより、SQLステートメント内のパラメータの検証を実行することです -

... 
WHERE ... 
AND DATEDIFF(day, @startDate, @endDate) < 31 

のようにこれが理由のカップルのための理想的ではないかもしれない - まず、それは無いと思うようにユーザーを導くこと結果が返されなかった理由を伝える手段がないため、基準を満たすデータが存在します。第2に、パラメータを評価する前に、DBエンジンが問合せのデータ部分を実行しないという保証はありません。第三に、悪い計画がキャッシュされる可能性があります。

SQL 2008を使用している場合は、SQL server resource govenorを調べることで、ユーザーまたはユーザーのグループを、推定された実行時間(秒単位)が所定のしきい値未満の実行中のクエリに限定する手段を提供します。

もう1つのアプローチは、ユーザーがクエリに使用するExcelシートにパラメータの検証を組み込むことですが、セットアップの詳細によっては実際的ではない場合があります。

関連する問題