关于利用TOP+临时表进行分页一点收获

博客指出系统LIST页面用TOP+临时表SQL分页时存在问题,点击INT类型字段排序,部分记录在所有页面都找不到。原因是TOP+数量用ORDER BY语句取记录时,值相同行顺序不同。解决办法是将COUNT列数据类型设为CHAR,或在ORDER BY多加非INT排序字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天发现系统中LIST页面中分页有问题,有些记录显示不出来,LIST页面用的是TOP+临时表SQL,错误在于:

当点击INT类型的字段排序,有些记录在所有的页面都找不到,百思不得其解,

把SQL语句抠出来运行发现:对于TOP+数量的用了ORDER BY语句取出来的记录的顺序不一样,发现

顺序不一样的行是值相同的那几行,比如:

SELECT TOP 10 * FROM TABLE1 ORDER [COUNT]  ASC
结果如下:
   IDCOUNT
131
12
22
564
65
86
98
7 7
45 7

SELECT TOP 11 * FROM TABLE1 ORDER [COUNT]  ASC

   IDCOUNT
131
12
22
564
65
86
96
45 7
7 7
4567

发现红色的两条记录位置已经变化,呵呵,用在分页技术上,如果PAGESIZE为9的话,那么有一行肯定是显示不了了。

后来将COUNT列的数据类型设置为CHAR,OK,每次取都是同样的顺序。不管TOP多少。。。。

想了半天,唯一的理由可能是SQL SERVER中执行计划在不同的TOP数量的时候有不同的策略吧。。

解决办法:
在ORDER BY多加一个排序字段,只要不是INT就行



转载于:https://www.cnblogs.com/zhongkeruanjian/archive/2005/02/23/108277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值