ACCESS和MSSQL-如何随机读取数据库记录
来源:互联网 发布:计划网络图绘制软件 编辑:程序博客网 时间:2024/04/28 06:45
查询语句只要这样写,就可以随机取出记录了
SQL="Select top 6 * from Dv_bbs1 where isbest = 1 and layer = 1 order by newID() desc"
在ACCESS里
SELECT top 15 id FROM tablename order by rnd(id)
SQL Server:
Select TOP N * From TABLE Order By NewID()
Access:
Select TOP N * From TABLE Order By Rnd(ID)
Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName)
Select TOP N * From TABLE Order BY Rnd(Len(UserName))
MySql:
Select * From TABLE Order By Rand() Limit 10
SQL数据库有个newid函数,可以很方便的用SQL语句得到表中的随机数据。但access数据库没这么方便,虽然有个Rnd,可以通过“select top 10 * from tb order by rnd(id)”得到随机数据,可惜在VB中使用,产生的随机序列是一样的。
有人说在程序中加上Randomize初始化随机种子,那么这只说对了一半,在程序中简单的加上Randomize,是没作用的,道理很简单,Randomize不可能影响SQL语句中的rnd,那只不过是个字符串,SQL语句是放到jet中去执行的。
前些天在论坛上看到有人说用time,那么只用rnd(time)这样是不行的,rnd中必须要包含表中的一个字段(任意字段,当然是主键效果更好),测试下来,rnd(time+id)这样依然不行! 不过非常意外的是rnd(time-id)却成功了。为什么说意外,按我的理解,time在与数值做运算时,会转换成一个小于1的double,这样与ID(大于1的正值)做减运算的结果必然是一个负数,我们知道rnd如果用了负数种子,会产生相同的随机序列,这是文件加解密算法中常用到的方法,可在这儿却能得到正确的结果,到现在也没想通......
接下去,用rnd(time-id)继续测试你会发现,连续快速地查询下,会有问题,会出现二次或三次查询结果一样的问题。分析一下可以找到原因,rnd(number)中的number是个single,这样它会截断time-id这个运算结果double后面数字,这样快速查询时number这个值没改变,所以查询结果也没有改变。
- ACCESS和MSSQL-如何随机读取数据库记录
- 随机读取Access数据库记录
- 随机读取Access数据库记录
- 随机读取Access数据库记录(转)
- 如何随机读取数据库记录
- 如何随机读取数据库中记录
- ASP.NET 2.0中随机读取Access数据库记录
- ASP.NET 2.0中随机读取Access数据库记录
- ASP.NET 2.0中随机读取Access数据库记录
- ASP.NET 2.0中随机读取Access数据库记录
- ASP.NET 2.0中随机读取Access数据库记录
- ASP.NET 2.0中随机读取Access数据库记录
- ASP读取ACCESS数据库随机记录的方法
- 随机读取数据库记录
- 随机读取access数据库中值
- 随机得到Access数据库记录
- 随机得到Access数据库记录
- 随机得到Access数据库记录
- server 2003 directx被禁用
- java.lang.Exception: Socket bind failed:
- Google招聘游戏人才有意涉足游戏领域
- xmlhttprequest返回数据 url中文传参
- tar打包时报错:Reached end-of-file before expected的解决方法
- ACCESS和MSSQL-如何随机读取数据库记录
- 删除确认 JavaScript
- 怎么使程序与服务器上的oracle11g进行通信呢-安装oracle11g客户端
- 项目综合管理--项目章程和范围说明书
- HeadFirst 设计模式学习笔记2--观察者模式
- Oracle - Schema Objects
- 转PHP程序员的40点陋习 完全版
- 无限级分类查询一个栏目下的所有子栏目
- JSF框架服务 (图例 JSF框架概况图)