我正在尝试使用另一个表中的随机行更新表的每一行(MSSQL 2008)。
首先创建数据:
CREATE TABLE #Name
(
Name NVARCHAR(MAX)
)
INSERT INTO #Name VALUES ('Joe'), ('Bloggs'), ('John'), ('Smith')
SELECT * INTO #Name2 FROM #Name
然后将#Name.Name
设置为#Name2.Name
的随机行:
UPDATE #Name SET #Name.Name=(SELECT TOP 1 Name FROM #Name2 ORDER BY NEWID())
但#Name.Name
始终是相同的值:
SELECT * FROM #Name
Name
----
Joe
Joe
Joe
Joe
如何更改SQL以使#Name.Name
是随机的?
答案 0 :(得分:1)
因为根据定义,表是一组无序的行,所以我并没有真正看到以“随机”顺序重新排序数据的重点,特别是在没有任何其他列的情况下,这里只有一个模式来实现这一目标:
;WITH n1 AS (SELECT Name, rn = ROW_NUMBER() OVER (ORDER BY Name) FROM #Name),
n2 AS (SELECT Name, rn = ROW_NUMBER() OVER (ORDER BY NEWID()) FROM #Name2)
UPDATE n1 SET Name = n2.Name
FROM n1 INNER JOIN n2 ON n1.rn = n2.rn;
请注意,这假设您只需要应用一次所有名称,而不是真正的随机(这将允许多次选择相同的名称)。