sqlserver 随机取数据,并分页

 declare @len bigint=100000,@base bigint=1000000000000000  --len 去除rand的前几位数,5个0表示去除前五位,为什么要去除?因为前五位变化太小
                                                           --base 得到随机数后乘以的值
declare @max bigint=2147483646  --rand函数允许的最大值
declare @rand bigint=7   --随机种子,数值变化,排序则变化,数值不变则排序不会变



SELECT TOP (100)  id,nickname 
,(RAND((id+@rand)%@max)*@base)-CAST( RAND((id+@rand)%@max)*@len as bigint)*(@base/@len) as seek
 
  FROM  [dbo].test

 order by seek 

 

每次取第一页的时候 ,生成一个rand种子,后面每页都使用该种子,就能分页。

刷新页面,重新取第一页时,重新生成一次种子

posted @ 2021-10-18 17:07  Xdoudou  阅读(247)  评论(0编辑  收藏  举报