我尝试使用另一个表中的随机行执行UPDATE
语句。我知道之前已经问过这个问题(here),但它似乎对我不起作用。
我应该使用与另一个表不同的值更新每一行。在我的情况下,它只从表中获取一个随机行并将其放在每一行中。
UPDATE dbo.TABLE_CHARGE
SET COLRW_STREET =
(SELECT TOP 1 COLRW_STREET FROM CHIEF_PreProduction.dbo.TABLE_FAKESTREET
ORDER BY ABS(CHECKSUM(NewId())%250))
提前致谢!
答案 0 :(得分:3)
我冒昧地假设您的TABLE_CHARGE
表中有ID字段。这可能不是最有效的方式,但似乎有效:
WITH random_values as
(
SELECT t.id, t.COLRW_STREET, t.random_street FROM (
SELECT c.id, c.COLRW_STREET,
f.COLRW_STREET as random_street, ROW_NUMBER() OVER (partition by c.id ORDER BY ABS(CHECKSUM(NewId())%250)) rn
FROM table_charge c, TABLE_FAKESTREET f) t
WHERE t.rn = 1
)
UPDATE random_values SET COLRW_STREET = random_street;
您的原始代码不起作用,因为当您使用一个TOP行执行... SET x = (SELECT TOP 1 ..)
数据库对目标表执行OUTER JOIN
时,这意味着一个单行应用于目标表中的所有行。因此,您在所有行中都具有相同的值。
以下查询演示了UPDATE
:
SELECT * FROM
TABLE_CHARGE tc,
(SELECT TOP 1 COLRW_STREET as random_street FROM TABLE_FAKESTREET
ORDER BY ABS(CHECKSUM(NewId())%250)) t
我的解决方案获取目标表中每条记录随机排序的所有虚假记录,并且只选择每个ID的第一个记录。