关于利用TOP+临时表进行分页一点收获
今天发现系统中LIST页面中分页有问题,有些记录显示不出来,LIST页面用的是TOP+临时表SQL,错误在于:
当点击INT类型的字段排序,有些记录在所有的页面都找不到,百思不得其解,
把SQL语句抠出来运行发现:对于TOP+数量的用了ORDER BY语句取出来的记录的顺序不一样,发现
顺序不一样的行是值相同的那几行,比如:
SELECT TOP 10 * FROM TABLE1 ORDER [COUNT] ASC
结果如下:
SELECT TOP 11 * FROM TABLE1 ORDER [COUNT] ASC
发现红色的两条记录位置已经变化,呵呵,用在分页技术上,如果PAGESIZE为9的话,那么有一行肯定是显示不了了。
后来将COUNT列的数据类型设置为CHAR,OK,每次取都是同样的顺序。不管TOP多少。。。。
想了半天,唯一的理由可能是SQL SERVER中执行计划在不同的TOP数量的时候有不同的策略吧。。
解决办法:
在ORDER BY多加一个排序字段,只要不是INT就行
当点击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就行

浙公网安备 33010602011771号