坑系列 (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"});

 

参考链接:

 

感谢帮助解决这个问题的小伙伴,如有新发现会继续更新~

 

posted @ 2021-09-07 17:32  77工作室  阅读(618)  评论(0)    收藏  举报