SQL Server如何编写UPDATE语句批量修正错误的partId数据
报错原因
你写的子查询SELECT partID FROM partsCatalog WHERE factoryId = 100没有加筛选条件匹配对应的officialIdentifierId,如果工厂100下存在多个零件,就会返回多条结果,赋值给单个partID字段时就会触发这个报错。
正确批量更新语句
SQL Server支持UPDATE关联多表的写法,你可以用下面的语句完成批量替换,注意:建议先把下面语句的UPDATE部分换成SELECT验证匹配结果无误后,再执行更新操作,避免数据写错:
UPDATE mp SET mp.partId = pc_correct.partId FROM industry.machineParts mp -- 关联原零件目录拿到错误零件的officialIdentifierId INNER JOIN partsCatalog pc_old ON mp.partId = pc_old.partId -- 关联工厂100的零件目录,用同一个officialIdentifierId匹配正确的partId INNER JOIN partsCatalog pc_correct ON pc_old.officialIdentifierId = pc_correct.officialIdentifierId AND pc_correct.factoryId = 100 -- 只更新原工厂为88、89的错误零件 WHERE pc_old.factoryId IN (88, 89)
语句逻辑说明
- 先关联
machineParts和partsCatalog的旧数据,定位到所有工厂88、89的错误零件记录 - 通过同一个
officialIdentifierId关联到工厂100下对应的正确partId - 直接将错误的
partId替换为匹配到的正确值,自动批量处理所有符合条件的行
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

