如何用单条UPDATE语句为同一列更新不同值(指定id)
单条UPDATE语句批量更新同一ID下的多属性值解决方案
原表结构及数据
create table Attributes ( id int, AttributeName nvarchar(255), AttributeValue nvarchar(255) ) insert into Attributes values (1, 'BuiltNo', '001') ,(1, 'ManagerName', 'x') ,(1, 'PlantAddress', 'NY') ,(2, 'BuiltNo', '002') ,(2, 'ManagerName', 'y') ,(2, 'PlantAddress', 'NSW') ,(3, 'BuiltNo', '003') ,(3, 'ManagerName', 'z') ,(3, 'PlantAddress', 'QLD')
需求说明
需要用单条UPDATE语句更新id=1的三条记录:
BuiltNo对应的AttributeValue改为*001ManagerName对应的AttributeValue改为*UpdatedValue- 可按需修改
PlantAddress的属性值(示例中默认保留原值)
错误写法分析
你之前的写法不符合SQL语法规范:UPDATE语句只能有一个SET子句和一个WHERE子句,不能重复定义SET和WHERE。
正确解决方案
利用CASE WHEN在SET子句中根据AttributeName的不同分支赋值,再通过WHERE限定仅更新id=1的记录,代码如下:
update Attributes set AttributeValue = CASE WHEN AttributeName = 'BuiltNo' THEN '*001' WHEN AttributeName = 'ManagerName' THEN '*UpdatedValue' -- 如需更新PlantAddress,添加以下分支即可 -- WHEN AttributeName = 'PlantAddress' THEN '新地址内容' ELSE AttributeValue -- 其他属性保持原有值 END where id = 1;
如果想进一步缩小更新范围,避免扫描id=1的所有记录,可在WHERE中额外限定需要更新的属性:
update Attributes set AttributeValue = CASE WHEN AttributeName = 'BuiltNo' THEN '*001' WHEN AttributeName = 'ManagerName' THEN '*UpdatedValue' ELSE AttributeValue END where id = 1 AND AttributeName IN ('BuiltNo', 'ManagerName', 'PlantAddress');
这样就能用单条UPDATE语句完成多属性值的更新,完全符合SQL语法规范。
内容的提问来源于stack exchange,提问作者Sonam Mohite
相关产品推荐
相关产品推荐

