现在的位置: 首页 > 综合 > 正文

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

2012年11月17日 ⁄ 综合 ⁄ 共 487字 ⁄ 字号 评论关闭
今天发现系统中LIST页面中分页有问题,有些记录显示不出来,LIST页面用的是TOP+临时表SQL,错误在于:

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

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

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

SELECT TOP 10 * FROM TABLE1 ORDER [COUNT]  ASC

结果如下:

   ID COUNT
13 1
1 2
2 2
56 4
6 5
8 6
9 8
7 7
45 7

SELECT TOP 11 * FROM TABLE1 ORDER [COUNT]  ASC

   ID COUNT
13 1
1 2
2 2
56 4
6 5
8 6
9 6
45 7
7 7
456 7

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

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

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

解决办法:

在ORDER BY多加一个排序字段,只要不是INT就行

抱歉!评论已关闭.