【问题标题】:update random numbers for top 100 rows in sql?更新sql中前100行的随机数?
【发布时间】:2011-05-07 15:49:09
【问题描述】:

我需要更新 sql 中前 100 行(一个字段)的随机数。随机数应该小于100。怎么办?

【问题讨论】:

  • 更新随机数是什么意思?能不能说得通一点?
  • 您没有说明数据应该如何排序,因此您不会知道更新了哪些 100 条记录。

标签: sql sql-server sql-server-2005 tsql sql-server-2008


【解决方案1】:

在 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)

【讨论】:

【解决方案2】:

很确定这在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    相关资源
    最近更新 更多