asp mysql 查询_ASP从数据库中随机查询指定数目的记录解决方法

关于使用ASP随机查询数据库中的数据,有两种两见的数据库,即Sql Server 和

Access。

SQL

server数据库有个NewID函数,可以很方便的用SQL语句得到数据表中的随机数据。即可以使用以下SQL语句来实现:

sql="Select top 10 * from TableName order

by NewId()"

Access数据库同样提供一个Rnd函数,可以通过以下SQL语句来实现随机:

sql="select top 10 * from TableName order

by Rnd(id)"

Rnd(id)

其中的id只是为了提供一个种子,可以利用其他任何数值来完成。在这里Id为主键的值,因为通常而言,主键一般为自动编号字段,即数值型。

可通过使用后发现,程序在第一次执行时是可以实现随机取得记录,但反复刷新后发现,每次返回的数据都相同。分析后发现,由于Access数据库记录集缓存的原因,从代码里得到Access数据库随机记录是得不到,需要用随机SQL语句的办法来消除缓存。

有人说在程序中加上Randomize初始化随机种子,这只说对了一半,在程序中简单的加上Randomize,是没作用的,道理很简单,Randomize不可能影响SQL语句中的Rnd,这个Rnd只不过是个字符串,SQL语句是通过数据库引擎去执行的,正因为如此,无法初始化种子,致使每次应用产生的随机序列是一样的。

由此可见,解决问题的关键就是如何初始化随机种子。Rnd函数语法是Rnd(number),它有一个特性,就是如果使用了负参数的

number,那么就会产生一个固定的随机序列。利用这个特性,我们的问题就迎刃而解了,这就是每次调用Rnd函数时,使用一个负的不同的number,从而达到产生不同随机序列的目的。经过测试,问题解决。使用如下代码即可使用正确的随机。

Randomize

sql="select top 10 * from TableName order by

Rnd("&Rnd()&"-id)"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值