随机排序查询Access

时间:2016-02-17 11:01:49

标签: sql ms-access asp-classic ms-access-2010 server-side

我正在使用这个简单的查询在ms-access数据库上使用随机排序:

SELECT pk FROM TABLE ORDER BY Rnd(pk) asc

当我使用Microsoft Access 2010进行测试时,它工作正常

但是,当我使用经典asp调用此查询时,随机排序不起作用。

这是我的代码:

set Rs = Server.CreateObject("ADODB.Recordset")
Rs.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/dbfolder") & "\dbname.mdb"

Rs.Source = "SELECT pk FROM TABLE ORDER BY Rnd(pk) asc"
Rs.CursorType = 3
Rs.CursorLocation = 2
Rs.LockType = 3
Rs.Open()

do while not Rs.eof
    'do stuff
    Rs.Movenext
loop

2 个答案:

答案 0 :(得分:3)

您只需要“salt”您的随机生成器:

Rs.Source = "SELECT pk FROM TABLE ORDER BY Rnd(-Timer() * [pk]) Asc"

答案 1 :(得分:1)

最后似乎我找到了解决方案。

来源:http://www.cosnetics.co.uk/articles/select-random-records-from-access/

按照以上链接中的内容

  

这是从Access中选择随机记录的一种非常简单的方法   数据库:

     

SELECT TOP 5 * FROM [tableName] ORDER BY rnd(INT(NOW*id)-NOW*id)

     

唯一的先决条件是您有一个AutoNumber Id列。它   还应该注意,虽然这会产生一组随机的   记录,它们在数学意义上并非真正随机,但是   对于大多数用途来说应该是随机的。

     

这种选择记录的方法也适用于sql server,但是你   必须将rnd改为rand。

如果您找到更好的解决方案,我会很高兴将其标记为好的解决方案。与此同时,我会把它留在这里。希望这会有助于其他人。 (你不会相信它,但我花了一些时间才找到它)