我目前正在处理以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);