我冒昧地假設你在你的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;
SQL Fiddle demo
您的原始代碼不起作用,因爲當喲做... 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的第一個。
究竟哪些方法不起作用? – Bulat 2014-09-19 09:00:07
感謝您的回覆! 我編輯了我的問題。不工作的部分是它更新隨機值的部分。它確實需要一個隨機值,但只有一個值。之後,將隨機值插入每個地方。 一個帶有大概相同問題的URL:http://goo.gl/pyHuhG – user3208216 2014-09-19 09:14:19
與您提供的鏈接的區別在於從另一個表進行更新,並且在SQL Server 2008和SQLServer 2012中正常工作http://sqlfiddle.com/ #!3/ab537/1 – bummi 2014-09-19 10:06:52