我目前正在处理以sql server 2008为后端的asp.net应用程序。我想让用户能够在SQL语句中指定要过滤的内容。
在界面上,我为他们提供了选择以下内容的选项:
等于
比...更棒
少于
等等

我想将此作为参数传递给要执行的sql查询。我怎样才能最好地做到这一点?

例如

Select amount, deduction, month from loan where amount @operant 10000;


@operand是上述下拉列表的返回值,即= < > <= >=

最佳答案

假设所有正整数均小于20亿,则此解决方案避免了多次查询和动态SQL。 OPTION (RECOMPILE)有助于阻止参数嗅探,但是根据表的大小,参数化设置和“优化临时工作负载”设置,这可能不是必需的。

WHERE [Amount] BETWEEN
CASE WHEN @operand LIKE '<%' THEN 0
     WHEN @operand = '>' THEN @operant + 1
     ELSE @operant END
AND
CASE WHEN @operand LIKE '>%' THEN 2147483647
     WHEN @operand = '<' THEN @operant - 1
     ELSE @operant END
OPTION (RECOMPILE);

08-06 19:48