也谈数据分页问题
前几天,有人问我数据库分页断号怎么办?
我知道的无外乎两种方法:
1 临时表,将所需数据插入临时表并构造id
2 sqlserver2005 rownumber()
但是好多人还是使用2000的,我想到个点子,如下
就是数据虽然段号,总该是有个标识,且叫做id
传入两个参数@id,@pagenum给你的sp
先判断实际数据量(count(*))是不是=@pagenum
如果不是的话,就依然向后搜索,用缺少的数据去union选择出的数据
我举个例子
如果你想每页显示10条
如果你的数据刚好从1到10,那么恭喜你,你不用费劲了
如果不是,而是
8 cody lazio 男 null 2000-09-07 23:48:21.000 否 null
12 neil chiv 男 1978-01-23 08:04:05.000 2005-10-17 15:54:37.000 是 bgmcyj42w3iu4puegqjxsxdyxrmtfzdrwlwpub8i7j48zmzxm22sx4dbipxiqlcxtedexudmi4884djcpbn81uh2wvuxrhjl7goo3xreuvryfgczb2eijj78xf6iqcp0atyxoib5ruqukyx3xbcvxmmwcbdm88eockvym031h3ytiqlbqlto
19 allan lanze 男 1974-04-07 22:25:07.000 2002-09-08 22:10:43.000 否 vrk3zvqjhe14h4snuvanh3enmojxhnnz73wgdksnhosmrsqla1lnmtjpcl4nvnu4qna0ivsb1vh4thripmnes7i8co138x7qvafeay108okfirzi2jfgmv6toa1ykgn3rq5pvuoilco01d2jdpk0ziyhyfga8d92smgatbqyht4bzn3zgwayr44dwoqqpuhxbtegw
22 guy dobb 男 1992-06-23 02:19:51.000 2006-12-18 06:18:49.000 是 null
23 buck luzi 男 1958-04-29 04:39:12.000 2001-12-08 00:15:45.000 否 yuzfv5iejyyco7akikqijfupvbusxxizdy6ykgkryfckhqsunoaquqekjserkphqvzko9roy68a0t1lch4h42skxkqjrxi7w19yrsevtqkxm03nh89ds7xqcwuhnm1xvarclgcgyhi
24 allan vogus 女 2000-04-11 19:42:15.000 2002-06-28 02:02:29.000 是 fvdmhsjhma3yquzidnzjubo1s0tmotm8f23hnlhdnpxolmwhkoqc2iqotbrpmkrg
27 ted paras 女 1988-01-29 03:31:58.000 2001-08-28 16:29:39.000 否 jm3avkhr7fuf6z2kszcsbssunwhin1fp7voyr7a9zzlmsn5qkoyrccxomm9gxlym1ls5f41v1bzxms8otgshyfwwpnpfva2lbq8jyy
30 wally camon 男 1985-06-12 11:49:55.000 null 是 apxrkg7ajiela7esz3mykxqvfy3w1fyuz7evcrtepxq9bf1qz4lw1rww32qq5pkbqiveo5vfzrgtogqlfu80wgvlzzfars1lix4i1gz4b3sdgc1jugewyzzsndl9nwoaluuvu4qh4xflf215xxcc7vdzk7lsrrpbnaghsw1q7xuv6sx1y
42 jamie baine 女 1967-02-14 17:53:52.000 2000-10-16 12:02:16.000 否 gy3zxlu7j3yetjfj3pd
45 buck null 女 1955-06-26 13:23:42.000 null 否 vknv35mihg5mp5lwkqs2brut3swafmhadigispwfffk2uyj
前面的数据是随机的,所以比较乱,第一个数字就是id
1-10之间就只有仅仅id=8这条数据,那你就麻了
从id>10的数据里选出top 9的在union,就ok了
如果段号段的厉害那也有办法,不如刚才8直接到1000,在加个判断count(1)=9,not goto 再选过,直至出9条出来
我说的有些乱,懒得写啊。
这里没代码,也许会让你失望。
trackback: http://tb.blog.csdn.net/trackback.aspx?postid=1487469