坑系列 (SQL ) -> SQL 参数化查询之 order by 结合 case when
遇到过一个问题,排序order by 需要参数化查询, 判断是‘desc’还是‘asc’, 所以有了一下的解决方案:
个人比较推荐的解决办法是:
点击查看代码
-- 第一种写法
select * from [your_table_name]
order by
case when @sort = 'desc' then ID end desc, --如果这两个case when 写的是不同的字段,表示有多级排序
case when @sort <> 'desc' then ID end asc
-- 第二种写法
select * from [your_table_name]
order by
case when @sort = 'desc' then -ID else ID end --ID这个字段是INT 型
以上解决办法同样适用于,后台拼接SQL 语句,类似于:
点击查看代码
string queryText = string.Empty;
.
.
.
queryText += " ORDER BY \r\n";
//Sort is neccesary, DESC OR ASC.
queryText += " CASE WHEN @sort = 'desc' THEN ID END DESC, CASE WHEN @sort <> 'desc' THEN ID END ASC";
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@sort", SqlDbType.VarChar) { Value = Sort.ToLower()}); // Sort 是方法传进去的参数
// 如果想要参数化查询,不能这样写,如下:
queryText += " ORDER BY @sort "; // 这是错误的!!!
// 在Value处进行判断也是不可行的!记下来!
parameters.Add(new SqlParameter("@sort", SqlDbType.VarChar) { Value = Sort.ToLower().Equals("desc") ? "desc" : "asc"});
参考链接:
- Parameter-driven ASC/DESC Sort? (超级有用,有用到项目中 👍👍👍)
感谢帮助解决这个问题的小伙伴,如有新发现会继续更新~
本文来自博客园,作者:77工作室,转载请注明原文链接:https://www.cnblogs.com/z7luv/p/15239339.html
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。

浙公网安备 33010602011771号