今天发现系统中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就行