好像没见过这样的Sql语句吧!
建议你可以读出所有记录,然后再随机选几条吧!

解决方案 »

  1.   

    select top 10 * from (select rand() as OrderNo,* from table_name) order by OrderNO
      

  2.   

    1. select top 10 * from table order by newid()
    2. MS 推荐的方法,第一种方法数据多了效率不高use pubs
    go
    set nocount on
    begin transelect au_id,cast( null as float) as rnd into #RndAuthors
    from Authors(TABLOCK SERIALIZABLE)
    --SELECT * FROM #RndAuthors
    create clustered index idx_ci_au_id on #RndAuthors(au_id)declare @key as varchar(11)
    select @key=min(au_id) from #RndAuthors/*create a loop that iterates through all the key values,and 
    for each key,invokes the RAND() function with no input,update 
    the float column with the random value generated.*/ while @key is not null
    begin
    update #RndAuthors set rnd=rand() where au_id=@key
    select @key=min(au_id) from #RndAuthors where au_id>@key
    end
    --select * from #RndAuthors
    set rowcount 10select a.*  from authors as a join #RndAuthors as R
      on a.au_id=R.au_id
    order by rnd
    drop table #RndAuthors
    commit tran建立一个Temp Table来生成Radom Seed.再与你的Table关联查询
      

  3.   

    粗看了一下上面的几种方法,不知道在ID不连续的情况下,这个随机处理是否会有一些不公平的因素在里面?我建议的方法是
    先取得记录总数,然后在这总数范围内生成10个互不相同的随机数,这个随机数就是记录按照ID排序后的顺序。
    取得这些数据的时候可以这样做(假如随机数分别是A,B,C...)
    select id from table order by id
    skip A-1 (skip为记录指针往下走,具体操作指令依据使用的数据集而定)  第一条
    skip B-A  第二条
    skip C-B  第三条
    ...
      

  4.   

    同意楼上的,不过我还有一个方法,实现起来跟你的不一样。
    1.把要提取的数据的主码读到一个临时表中,并且在这个临时表加一个自动增加的ID,和一个bit字段  not null default 0。
    2。产生最大ID内的10个随机数,更新ID=(10个随机数)的记录bit字段为true
    3.提取这个临时表与原表的连接记录其中bit位为1 and 主码为连接条件。
    4.这就搞定了,当然这个10可以改为一个百分比,产生最大ID的某个百分比的记录数,这样的话就会在很多地方使用了。
      

  5.   

    刚才看另一位有这种方法,我试了一下不错:
    select top 10 * from table order by newid()
      

  6.   

    感谢各位同行的意见和解答,其实都怪MS,如果他们在开发的时候想到这一点,是不是他们加个子程序就OK了?
      

  7.   

    告诉你一个简单的方法:
    首先把总记录数赋个变量I,这个没问题吧
    然后做一个from j=1 to 10 的循环
    没次生成一个随机数,拿这个数剩I,然后取整就得到一个记录的BOOKMARK即得到一条随机记录,别的就不说了,类推!
      

  8.   


     wzrain(晨雨)  的
    值得考虑