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;
    }
相关推荐
不光头强2 小时前
Spring框架的事务管理
数据库·spring·oracle
百***92024 小时前
【MySQL】MySQL库的操作
android·数据库·mysql
q***76664 小时前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
信仰_2739932434 小时前
Redis红锁
数据库·redis·缓存
人间打气筒(Ada)4 小时前
Centos7 搭建hadoop2.7.2、hbase伪分布式集群
数据库·分布式·hbase
心灵宝贝4 小时前
如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程)
数据库·mysql·macos
奋斗的牛马5 小时前
OFDM理解
网络·数据库·单片机·嵌入式硬件·fpga开发·信息与通信
忧郁的橙子.6 小时前
一、Rabbit MQ 初级
服务器·网络·数据库
杰杰7986 小时前
SQL 实战:用户访问 → 下单 → 支付全流程转化率分析
数据库·sql
爬山算法6 小时前
Redis(120)Redis的常见错误如何处理?
数据库·redis·缓存