You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用另一表随机值替换目标表单列时所有行被赋同一值如何解决

问题根源
  • 笔误问题:原语句存在两处字段名错误,源表#test2存储候选值的字段为src1而非LastName,且需求是替换#test.col2,原语句错误修改了col1字段。
  • 执行逻辑问题:CROSS APPLY关联的子查询没有引用外部#test表的任何字段,SQL Server查询优化器会将该子查询判定为独立的常量查询,仅执行一次生成随机结果,所有目标表行都会复用这同一个结果,就出现了全表字段值相同的问题。
修复方案

只需要在子查询中增加一个和外部#test表字段关联的恒真条件,强制优化器遍历#test每一行时都重新执行一次子查询、生成新的随机值即可。WHERE #test.col2 = #test.col2看起来是无意义的恒真条件,核心作用是建立子查询和外部行的依赖关系,避免优化器做常量折叠,修正后的语句如下:

UPDATE #test
SET col2 = data1.src1
FROM #test
CROSS APPLY
    (SELECT TOP(1) #test2.src1
     FROM #test2
     -- 建立和外部行的依赖,强制每行重新计算随机值
     WHERE #test.col2 = #test.col2
     ORDER BY NEWID()) data1
效果说明

执行后#test表的每一行col2字段都会独立从#test2.src1的候选值中随机选取,不会出现全行统一值的情况。

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:54:01