我目前有一个对应于业务对象的“过滤器”对象。此对象具有与我希望能够过滤/搜索此类业务对象列表的不同方式相关的属性。目前,这些过滤器对象有一个方法,该方法构建 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 ");
}