问题描述
如果满足不同条件,则尝试为表中的行合并UPDATE子句。我正在通过Azure SQL上的TSQL进行此操作。
我可以以相互排斥的绿色代码格式运行多个TSQL语句,但我宁愿使用嵌套的IF ELSE语句以使代码更整洁。
解决方法
使用case
表达式一键完成所有操作。
update student set
p2 = case when total_score > 500 then 'pass' else 'fail' end
where p2 is null;
您可以通过使用case
表达式来测试列是否需要更新,从而将以下两个更新组合在一起:
update student set
p1 = case when p1 is null and age > 20 then 'old' else p1 end,p2 = case when p2 is null then case when total_score > 500 then 'pass' else 'fail' end else p2 end
where p2 is null or p1 is null;
注意:作为设计问题,根据学生的年龄设置列值通常不是一个好主意,因为它只会给您一个时间点,因此您通常需要不断对其进行更新。查询表时进行计算要好得多。