declare @a int
set @a=(abs(checksum(newid())%2)+1)*10
exec('select top '+@a+' * from 表')

解决方案 »

  1.   

    随机的题目,可以考虑:
    事先生成N个随机数,形成一个字符串,如 "3, 20, 97, 23, 63", 将该串作为参数传入一个存贮过程。存贮过程中将所有的记录取出插入一个临时表中,使该临时表具有连续的 Identity 字段值。再从该表中取出对应的记录。
    SQL 你自已写吧。
      

  2.   

    declare @a int
    set @a=(abs(checksum(newid())%2)+1)*10
    exec('select top '+@a+' * from 表 order by newid()')
      

  3.   

    pengdali(大力) :你这种方法太好啦。能详细讲一下原理吗?对于 CheckSum(), newid()的使用。事实上,我试过了:
    select top 10 * from posts order by newid(); 
    这样就可以了。
      

  4.   

    哈哈!
    newid()是得到16进制的GRID()
    我是借用Checksum转换为整型
    如:select CHECKSUM (0xF9)
    select newid()
      

  5.   

    哦,明白了。你这样做的目的是,可以随机的返回10条或20条随机记录。一开始看到你用两个 NewID(),搞混了。 :-)
      

  6.   

    declare @a int
    set @a=(abs(checksum(newid())%2)+1)*10
    exec('select top '+@a+' * into #temp from 表 order by newid();
    while (select sum(A) from #temp)<>30
    begin
      delete #temp;
      insert #temp select top '+@a+' * from 表 order by newid();
    end;
    select * from #temp')