[此文来源于互联网,牛C网只负责收集整理]
此问题早已有人提出,解决的方法也非原创。写这篇东西,意在共同探讨。毕竟目前还没有非常满意的结论。先说说现在网上大多数转贴是这样说的:
SQL Server 2000:
SELECT TOP n * FROM tanblename ORDER BY NEWID()
Access:
SELECT TOP n * FROM tanblename ORDER BY rnd([一个自动编号字段])
SQL 有了 NEWID() 就无须多讲拉,但 Access 中没有,所以寄望于 RND,实际上这条语句在 Access 中的“查询”中是可以运行并得到随机结果的,但在 ASP 中却无法得到预期的随机效果——无论如何刷新得到的结果都是一样的(就算在语句前加上 Randomize 也一样于事无补)。
当然,也不少其他的解决方法,用数组的,用循环的……不好说不对,但总觉得跑题了。后来有另外的朋友试验出这个方法:表 TestTable,有自动编号字段 TestID,标题字段 TestTitle,随机取得5条纪录,用代码:
Randomize
SELECT TOP 5 [TestTitle] FROM [TestTable] ORDER BY Rnd(-(TestID "&Rnd()&"))
实际上,我目前需要应用到随机纪录的地方就是用的这条语句,除此我没有其他更好的方法(但用过才知道,其实这条语句偶然会生成重复纪录的)。也许你会有更好的方法……
作者:gdgzboy@牛C网
地址:http://www.niuc.net/post/2426/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
牛C网推荐您再看看以下日志:
SQL数据库高级教程-学习 SQL ORDER BY 语句
数据库实战经验之浅谈数据库的设计技巧
技巧-SQL Server 2005对海量数据处理的实现
SQL Server 2000数据库中如何重建索引
学习SQL之关于select ... where 的小技巧
细化分析 REP_AGENT长时间不启动的现象
快速解决引用对象时,必须加owner的问题
教你手工创建数据库的全部脚本及说明
Oracle中decode()函数的使用技巧
获取Access2000数据库中所有表的名称
SQL数据库高级教程-学习 SQL ORDER BY 语句
数据库实战经验之浅谈数据库的设计技巧
技巧-SQL Server 2005对海量数据处理的实现
SQL Server 2000数据库中如何重建索引
学习SQL之关于select ... where 的小技巧
细化分析 REP_AGENT长时间不启动的现象
快速解决引用对象时,必须加owner的问题
教你手工创建数据库的全部脚本及说明
Oracle中decode()函数的使用技巧
获取Access2000数据库中所有表的名称
解析SQLServer事务日志压缩与删除的方法
不要在SQL Server中盲目地追求一句处理





