上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
随机选择数据库记录的方法
作者:未知 申领版权
2010年12月12日 共有 2608 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    随机选择数据库记录的方法
    (使用Randomize函数,通过SQL语句实现) 
    对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:  
    Randomize  
    RNumber = Int(Rnd*499)  1  
    
    While Not objRec.EOF  
    If objRec("ID") = RNumber THEN  
    ... 这里是执行脚本 ...  
    end if  
    objRec.MoveNext  
    Wend  
    
    这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?  
    采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:  
    Randomize  
    RNumber = Int(Rnd*499)   1  
    
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber  
    
    set objRec = ObjConn.Execute(SQL)  
    Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")  
    
    不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。  
    再谈随机数  
    现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。  
    为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:  
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3  
    
    假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):  
    SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "  9"  
    
    注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。 
    
    
    随机读取若干条记录,测试过 
    Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id) 
    Sql server:select top n * from 表名 order by newid() 
    mysqlelect * From 表名 Order By rand() Limit n 
    Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查) 
    语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ... 
    使用SQL语句 用...代替过长的字符串显示 
    语法: 
    SQL数据库:select case when len(field)>10 then left(field,10) '...' else field end as news_name,news_id from tablename 
    Access数据库:SELECT iif(len(field)>2,left(field,2) '...',field) FROM tablename;  
    
    Conn.Execute说明 
    Execute方法 
    该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种: 
    1.执行SQL查询语句时,将返回查询得到的记录集。用法为: 
    Set 对象变量名=连接对象.Execute("SQL 查询语言") 
    Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。 
    
    2.执行SQL的操作性语言时,没有记录集的返回。此时用法为: 
    连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option] 
    ·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。 
    ·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。 
    
    ·BeginTrans、RollbackTrans、CommitTrans方法 
    这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。 
    事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。 
    BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
    

    

 

相关新闻

选择的困惑
选择 (3)
选择 (2)
选择 (1)
成为关键人物(1)
想达到目的该怎么做(2)
想达到目的该怎么做(1)
好好想想你的选择(2)
好好想想你的选择(1)
你是天才

您可能对这些感兴趣  

A0、A1、A2、A3图纸折叠方法
dos命令的其它用处
系统外部命令
DOS命令全集:(网络收集3 )
DOS命令全集:(网络收集2 )
DOS命令全集:(网络收集 )
SQL优化34条
MS SQL Server查询优化方法
学习存储过程
事务全攻略

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》