id name number
行数是1到6行,如何简单的语句更新number为3,4,5,6,8,10中的一个,随机分配。每行number不重复。不用很机械的语句。有没有批量更新的方法

解决方案 »

  1.   

    算了还是建个数字表。
    用row_number() over (order by newid())赋值好了,总好过一行一行更新
      

  2.   

    update tb set name='dd' where id in(select id from tb where id in(3,4,5)order by newid()) 
      

  3.   

    select *,bh=num from 
    (select *,bh2=row_number() over (order by [id]) from web_enemy a with(nolock) where a.id in(1,2,3,4))b
    left join 
    (select row_number() over (order by newid()) as bh2,[num] from web_num c with(nolock))d 
    on b.bh2=d.bh2 order by d.num
      

  4.   

    web_num表把这几个数存进去了。。
      

  5.   

    如果是在指定范围内的话可以建个临时表放指定的数据,然后加一个用NEWID排序生成的ID,再与原表的ID JOIN一下
      

  6.   

    update top (6) tb 
    set number=
    (select top (1) N from
     (select 3 as n
      union select 4 
      union select 5 
      union select 6
       union select 8 
       union select 10)k 
     order by CHECKSUM(NEWID()))
      

  7.   

    T-MAC,这样UPDATE TOP 6能排序吗?怎么保证是更新的ID为1到6的数据
      

  8.   

    不。。
    物理排序的 
    update  tb 
    set number=
    (select top (1) N from
     (select 3 as n
      union select 4 
      union select 5 
      union select 6
       union select 8 
       union select 10)k 
     order by CHECKSUM(NEWID()))
    where ID BETWEEN 1 AND 6
      

  9.   

    目前TOP 后的 还不支持 order by
      

  10.   

    我也觉得用WHERE比较好。不能用ORDER BY的话UPDATE TOP岂不是有点鸡肋