SQLSERVER 查询语句加with (NOLOCK) 报ORDER BY 报错 除非另外还指定了 TOP、OFFSET 或 FOR XML

最近有一个项目在客户使用时发现死锁问题,用的数据库是SQLSERVER ,死锁的原因是有的客户经常去点报表,报表查询时间又慢,然后又有人在做单导致了死锁,然后主管要我们用SQLSERVER查询时要加with (NOLOCK),但是我在加完 with (NOLOCK) 后发现已经的用Mybatis-plus的 在mybatis里的分页报错了

原因是用了with (NOLOCK) ,select count 把ORDER BY 也放进去了,所以报了这个错

解决办法

1.如果你不是很需要加with (NOLOCK) 的话还是不要加为好。

2.你确实需要加的话,还要用Mybatis-plus的话,要么就自己写select count,要么也可以自己写个后端分页,还可以和pagehelper分页插件组合使用

我的解决办法(将IPage 查询结果换成List 集合返回结果 然后 再将List集合转化成IPage 分页集合)

javascript 复制代码
protected IPage list2Page(Term term, List list) {
        IPage iPage = this.getPage(term);
        int start = (term.getPage() - 1) * term.getRows();
        int end = term.getPage() * term.getRows();
        List list$cpage = new ArrayList();

        for(int i = 0; i < list.size(); ++i) {
            if (i >= start && i < end) {
                list$cpage.add(list.get(i));
            }
        }

        iPage.setTotal((long)list.size());
        iPage.setRecords(list$cpage);
        return iPage;
    }
相关推荐
rrrjqy1 分钟前
Redis常见问题(一)
数据库·redis·缓存
Humbunklung3 分钟前
WMO 天气代码(Code Table 4677)深度解析与应用报告
开发语言·数据库·python
道清茗12 分钟前
【MySQL知识点问答题】锁机制、索引优化与数据库恢复方法
数据库·mysql
hero.fei25 分钟前
排查redis出现报错ERR redis temporary failure
数据库·redis·缓存
野犬寒鸦33 分钟前
MySQL复习记录Day01
数据库·后端
ward RINL38 分钟前
Spring boot启动原理及相关组件
数据库·spring boot·后端
RisunJan1 小时前
Linux命令-mysqldump(MySQL数据库中备份工具)
linux·数据库·mysql
DolphinDB智臾科技1 小时前
直播回顾 | 物联网时序数据库如何驱动电力场景智能调度?
数据库·物联网·时序数据库
郝学胜-神的一滴1 小时前
解锁CS数据存储的核心逻辑:从结构选择到表单设计的全解析
linux·服务器·数据库·c++·后端·oracle
qq_391105341 小时前
TDengine C# 连接示例和授权管理
大数据·数据库·c#·时序数据库·tdengine