从数据库里随机抽取2条记录
(1)SQL Server 2000 :
SELECT TOP 2 * FROM Exam ORDER BY NEWID()
(2) Access:
-----------------------------------------------------------
转自:http://hi.baidu.com/qingwen98/blog/item/eb82151a68443c118618bfd5.html
从数据库随机抽取记录(ASP/access/ms sql)程序代码
ASP与数据库浏览次数:
|
在数据库(Access/MS Sql)中随机抽取记录集
随机提取10条记录的例子:
Access(ASP):
sql="Select top 10 * FROM [tableName] orDER BY Rnd(id)"
其中id为自动编号,也可以换成其它数字类型的字段,如果想用非数字类型的字段,就要用到len函数了,语句:
sql="Select top 10 * FROM [tableName] orDER BY Rnd(len(title))"
得出记录如:
这样有个问题,就是生成的记录是不变的,就是不管怎么刷新都是这几条记录,如果想让每刷新一次,记录改变的话,就要用到 ASP中的随机函数,让 id值每次刷新后都重新生成新值,语句:
Randomize
sql="Select top 10 id FROM [tableName] order BY rnd(-(ID+"& rnd() &"))"
刷新两次得出的记录如:
这样,每刷新一次,记录就不相同了。
MS Sql库:
sql库就不用这么麻烦了,一条SQL语句就能产生第次执行这条语句的时候产生不同的随机内容,语句:
sql="select top 10 * from [tablename] order by newid()"
其中,newid为SQL内置函数,
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()&"))
实际上,我目前需要应用到随机纪录的地方就是用的这条语句,除此我没有其他更好的方法(但用过才知道,其实这条语句偶然会生成重复纪录的)。也许你会有更好的方法……