基于临时表#tempGd更新revision表日期列的SQL语句报错求助
问题分析与解决方案
原SQL执行失败的核心原因:SET date = ('2023-06-03', '2023-06-03','2024-06-03')的写法不符合SQL赋值逻辑,数据库无法将多个日期值分别对应到不同的revisionid记录上。
解决方案1:通过CASE WHEN直接匹配赋值
无需修改临时表,直接在UPDATE语句中根据revisionid匹配对应的日期:
UPDATE revision SET date = CASE revisionid WHEN 22 THEN '2023-06-03' WHEN 39 THEN '2023-06-03' WHEN 3 THEN '2024-06-03' END WHERE revisionid IN (SELECT revisionid FROM #tempGD);
解决方案2:给临时表添加日期列后关联更新
如果后续需要重复使用日期与revisionid的对应关系,可以先给临时表补充日期字段,再关联更新:
- 给临时表添加日期列:
ALTER TABLE #tempGd ADD target_date DATE;
- 给临时表每条记录设置对应日期:
UPDATE #tempGd SET target_date = CASE revisionid WHEN 22 THEN '2023-06-03' WHEN 39 THEN '2023-06-03' WHEN 3 THEN '2024-06-03' END;
- 关联临时表更新
revision表:
UPDATE r SET r.date = t.target_date FROM revision r INNER JOIN #tempGd t ON r.revisionid = t.revisionid;
内容的提问来源于stack exchange,提问作者yaguyon
相关产品推荐
相关产品推荐

