現在、ビジネス オブジェクトに対応する「フィルタ」オブジェクトがあります。このオブジェクトには、そのようなビジネス オブジェクトのリストをフィルタリング/検索できるようにするさまざまな方法に関連するプロパティがあります。現在、これらの Filter オブジェクトには、WHERE 句の内容を作成するメソッドがあり、SQL Server 2000 ストアド プロシージャに渡されて残りの選択クエリと連結されます。最後の文字列は、Execを使用して実行されます。
現在、これは問題なく動作しますが、実行計画のキャッシュがないことによるパフォーマンスの問題が心配です。いくつかの調査では、 sp_executesqlの呼び出しの使用を見てきました。これはより良い解決策ですか、それとも私がやっていることについてより良い慣習がありますか?
更新: sp_executesql の使用に関する問題の一部は、フィルターのコレクションに基づいて、OR ステートメントのリストを生成する必要があることだと思います。「パラメータ化された」クエリが私の解決策になるかどうかはわかりません。
例
var whereClause = new StringBuilder();
if (Status.Count > 0)
{
whereClause.Append("(");
foreach (OrderStatus item in Status)
{
whereClause.AppendFormat("Orders.Status = {0} OR ", (int)item);
}
whereClause.Remove(whereClause.Length - 4, 3);
whereClause.Append(") AND ");
}