SQL Server:随机化行(随机ID)

时间:2015-03-01 10:36:25

标签: c# sql-server

有没有办法随机化SQL Server中的行?

我不想以随机的方式检索行,我知道如何去做。

我想要将数据库中的行ID混洗(例如,ID1将更改为ID27,ID27将更改为ID1)。

我可以将所有记录复制到临时表中,截断原始表并使用并行循环从临时表中插入记录进行随机化。

有更简单的方法吗?

ID是身份种子,自动递增

1 个答案:

答案 0 :(得分:0)

这听起来像是一个非常奇怪的要求。由于id是一个标识,你不能改变它,所以你必须交换行上的所有其他数据,你可能会做这样的事情:

select
  a.id as old_id,
  b.*
into #newdata
from
  (
    select 
      id, 
      row_number() over (order by id) as rn 
    from 
      data
  ) a
  join (
     select 
      *, 
      row_number() over (order by newid()) as rn 
    from 
      data
  ) b on a.rn = b.rn

这会创建一个临时表,其中包含新旧ID号+表中的所有列。然后,您可以使用此临时更新原始表中的行的所有列。表

不能真的建议这样做,特别是如果有很多行。在执行此操作之前,您可能应该对表进行表级别独占锁定以防万一。