[英]Rewriting dynamic SQL in to stored procedure
我看到,这已经问过这个帖子 ,并又看了看WHEN-THEN
构造,但它确实没有回答一些问题。
当前在代码中,使用StringBuilder
构建SQL查询,如下所示:
buildSearchQuery.Append("SELECT * FROM Policy WHERE Field_1 = '" + param_1 + "'");
if (Condition 2){
buildSearchQuery.Append("AND Field_2 = '" + param_2 + "' ");
}
if (Condition 2)
{
buildSearchQuery.Append("AND Field_3 = '" + param_3 + "' ");
}
...
您得到图片。 这些参数值总共有20个,我的任务是创建一个存储过程并将这些值作为参数传递。
我是否创建具有所有参数的存储过程并在那里执行逻辑(如果不确定)。 像这样吗
SELECT * FROM TABLE WHERE Field_1 = @param_1
IF(@param_2 <> NULL)
AND Field_2 = param_2
...
这些参数并不总是具有值,因此它们不能成为查询的一部分。 使这项工作牢记性能的最佳方法是什么?
您的存储过程将具有3个参数@ param_1,@ param_2,@ param_3
这些参数的默认值可以设置为NULL。
存储过程中的条件将是这样的
WHERE ( @param_1 is NULL or field_1 = @param_1)
AND
( @param_2 is NULL or field_2 = @param_2)
AND
( @param_3 is NULL or field_3 = @param_3)
OPTOIN(RECOMPILE)
添加OPTION(RECOMPILE)
在每次执行查询时重新构建执行计划,而使用OR
条件则将是有益的。
由于这些都是可空参数,因此可以在where中使用合并,而不是在括号内使用OR。 我认为它的阅读效果更好。
在哪里合并(@ param_1,field_1)
和
合并(@ param_2,field_2)
和
合并(@ param_3,field_3)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.