日期:2014-05-18  浏览次数:20461 次

select top问题
select   top   1000   from   table   order   by   newid()

能不能让top   1000的这个数值是随机的,1000是个变量,比如定制SQL作业,
每10分钟更新一些数据,这次是top   1000,下次更新的随机任意数,120,121,
2002等等。

select   top   rand()   *   显示是不对的,另外最好是在一个值的范围内,如在1000条
记录以内。

这条SQL语句是做作业运行的,所以不要考虑外面传入变量数值问题。

谢谢!



------解决方案--------------------
declare @i int
set @i=1000*rand()

print @i

set rowcount @i
select * from table order by newid()
set rowcount 0
------解决方案--------------------
declare @num int
set @num = rand() * 1000

declare @sql varchar(200)
set @sql = 'select top ' + cast(@num as varchar) + ' * from tab order by newid() '
exec(@sql)

------解决方案--------------------
try

Declare @I Int
Select @I = Cast(Ceiling(Rand() * 1000) As Int)
EXEC( 'Select TOP ' + @I + ' * From [table] order by newid() ')
------解决方案--------------------
eclare @i int
set @i=rand()*1000 --范围1000
declare @strsql varchar(100)
set @strsql= 'select top ' + convert(varchar(5),@i) + ' * from 表名
print(@strsql)
exec(@strsql)
------解决方案--------------------
declare @i int
set @i=rand()*1000 --范围1000
declare @strsql varchar(100)
set @strsql= 'select top ' + convert(varchar(5),@i) + ' * from 表名
print(@strsql)
exec(@strsql)

------解决方案--------------------
弄複雜了

Declare @I Int
Select @I = Rand() * 1000
EXEC( 'Select TOP ' + @I + ' * From [table] order by newid() ')