加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 简单的更新语句,以便为所有行分配不同的值

发布时间:2021-02-22 21:42:58 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试将一个表中的列设置为随机外键以进行测试. 我尝试使用以下查询 update table1 set table2Id = (select top 1 table2Id from table2 order by NEWID()) 这将随机获得一个table2Id,并将其作为table1中的外键分配给每一行. 这几乎是我想要的,但我希

我正在尝试将一个表中的列设置为随机外键以进行测试.
我尝试使用以下查询

update table1 set table2Id = (select top 1 table2Id from table2 order by NEWID())

这将随机获得一个table2Id,并将其作为table1中的外键分配给每一行.
这几乎是我想要的,但我希望每一行获得不同的table2Id值.

我可以通过遍历table1中的行来做到这一点,但我知道有一种更简洁的方法.

解决方法

在一些测试表上,我的结束您的原始计划如下所示.

它只计算一次结果并将其缓存在sppol中然后重放该结果.您可以尝试以下操作,以便SQL Server将子查询视为相关的,并且需要为每个外部行重新评估.

UPDATE table1
SET    table2Id = (SELECT TOP 1 table2Id
                   FROM   table2
                   ORDER  BY Newid(),table1.table1Id)

对我来说,这个计划没有线轴.

关联table1中的唯一字段非常重要,这样即使添加了一个假脱机,它也必须始终被反弹而不是重绕(重放最后的结果),因为每行的相关值都不同.

如果表很大,这将会很慢,因为所需的工作是两个表行的乘积(对于table1中的每一行,它需要对table2进行全面扫描)

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读