考虑这些数据:
CREATE TABLE #Data (DataID INT,Code VARCHAR(2),Prefix VARCHAR(3)) INSERT INTO #Data (DataID,Code) VALUES (1,'AA'),(2,(3,(4,(5,(6,'AA') CREATE TABLE #Prefix (Code VARCHAR(2),Prefix VARCHAR(3)) INSERT INTO #Prefix (Code,Prefix) VALUES ('AA','ABC'),('AA','DEF'),'GHI'),'JKL')
我想将#Data中的前缀值设置为#Prefix中的随机前缀,并带有匹配的代码.
使用直接内连接只会导致使用一个值:
UPDATE D SET Prefix = P.Prefix FROM #Data AS D INNER JOIN #Prefix AS P ON D.Code = P.Code
从这里阅读其他问题,建议将NEWID()作为随机排序的方式.将联接更改为:
SELECT TOP 1 subquery ordering by NEWID()
仍然只为每一行选择一个值(每次随机):
UPDATE D SET Prefix = (SELECT TOP 1 P.Prefix FROM #Prefix AS P WHERE P.Code = D.Code ORDER BY NEWID()) FROM #Data AS D
所以,我不确定如何从单个更新语句中为每个数据条目获取随机前缀.我可以通过#Data表进行某种循环,但我避免在sql中触及循环,我确信这会很慢.它的实际应用将在成千上万的记录中,数十个代码有数百个前缀.