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')
事先生成N个随机数,形成一个字符串,如 "3, 20, 97, 23, 63", 将该串作为参数传入一个存贮过程。存贮过程中将所有的记录取出插入一个临时表中,使该临时表具有连续的 Identity 字段值。再从该表中取出对应的记录。
SQL 你自已写吧。
set @a=(abs(checksum(newid())%2)+1)*10
exec('select top '+@a+' * from 表 order by newid()')
select top 10 * from posts order by newid();
这样就可以了。
newid()是得到16进制的GRID()
我是借用Checksum转换为整型
如:select CHECKSUM (0xF9)
select newid()
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')