有没有办法随机化SQL Server中的行?
我不想以随机的方式检索行,我知道如何去做。
我想要将数据库中的行ID混洗(例如,ID1将更改为ID27,ID27将更改为ID1)。
我可以将所有记录复制到临时表中,截断原始表并使用并行循环从临时表中插入记录进行随机化。
有更简单的方法吗?
ID是身份种子,自动递增
答案 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号+表中的所有列。然后,您可以使用此临时更新原始表中的行的所有列。表
不能真的建议这样做,特别是如果有很多行。在执行此操作之前,您可能应该对表进行表级别独占锁定以防万一。