【发布时间】:2011-05-07 15:49:09
【问题描述】:
我需要更新 sql 中前 100 行(一个字段)的随机数。随机数应该小于100。怎么办?
【问题讨论】:
-
更新随机数是什么意思?能不能说得通一点?
-
您没有说明数据应该如何排序,因此您不会知道更新了哪些 100 条记录。
标签: sql sql-server sql-server-2005 tsql sql-server-2008
我需要更新 sql 中前 100 行(一个字段)的随机数。随机数应该小于100。怎么办?
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql sql-server-2008
在 SQL 2008 中
update top (100) MyTable
set MyField = cast(cast(crypt_gen_random(1) as int) * 100.0 / 256 as int)
我相信这同样适用于 SQL 2005。
[编辑]
如果它在 SQL 2005 中不起作用,您可以这样做:
update top (100) MyTable
set MyField = abs(cast(newid() as binary(6)) % 100)
【讨论】:
crypt_gen_random 函数在SQL Server 2005 中不可用(它不在“其他版本”下拉列表中)。
很确定这在 2k5 中是可以的;
--add rows numbers
;with ROWS(id, fld, rownum) as
(
select id, fld,
row_number() over (order by id asc) --this order defines your "top"
from tablename
)
update tablename
set fld = 1 + abs(checksum(newid())) % 100 --dont use rand() as it will give the same value
from ROWS inner join tablename on tablename.id = ROWS.id
where rownum between 1 and 100 --limit to 100 rows
【讨论】: