如何将临时表数据回填至源表?基于INSERT OUTPUT的SQL问题
实现INSERT+OUTPUT后的数据回填操作
你当前的UPDATE思路存在逻辑问题:
- WHERE子句中
source_table.eggs IN (...)完全不成立,因为要更新的source_table.eggs原本就是NULL,而子查询返回的是@temp里的非NULL值 - SET部分没有正确关联到@temp中对应的
eggs值
以下是两种正确的实现方式:
方式1:使用JOIN(推荐,大数据量下效率更高)
通过表关联直接匹配对应行,赋值逻辑清晰:
UPDATE st SET st.eggs = t.eggs FROM source_table st INNER JOIN @temp t ON st.id = t.spam WHERE st.eggs IS NULL -- 可选:确保只更新之前被筛选出的eggs为NULL的行,避免误改其他数据
方式2:使用相关子查询赋值
如果更倾向子查询写法,可通过EXISTS锁定需要更新的行,同时在SET中用子查询获取对应值:
UPDATE source_table SET eggs = (SELECT t.eggs FROM @temp t WHERE t.spam = source_table.id) WHERE EXISTS ( SELECT 1 FROM @temp t WHERE t.spam = source_table.id )
逻辑说明
两种写法均实现:将@temp中spam字段(对应source_table的id)匹配的eggs值,回填到source_table的对应行中。
内容的提问来源于stack exchange,提问作者JacobIRR
相关产品推荐
相关产品推荐

