Sql 将值A更改为B,无论它位于哪个列中
单次更新工作:Sql 将值A更改为B,无论它位于哪个列中,sql,sql-server,Sql,Sql Server,单次更新工作: UPDATE users SET email=@newemail WHERE email=@oldemail (1 Zeile(n) betroffen) 双重更新不起作用: UPDATE users SET email=@newemail WHERE email=@oldemail, alternateEmail=@newemail WHERE alternateEmail=@oldEmail Meldung 102, Ebene 15, Status 1, Zeile 1
UPDATE users SET email=@newemail WHERE email=@oldemail
(1 Zeile(n) betroffen)
双重更新不起作用:
UPDATE users SET email=@newemail WHERE email=@oldemail, alternateEmail=@newemail WHERE alternateEmail=@oldEmail
Meldung 102, Ebene 15, Status 1, Zeile 1
Incorrect syntax near ','.
在一条语句中如何执行此操作(即使我有N列要检查)
澄清一下:如果我有桌子
email alternateEmail
a@b.c d@e.f
d@e.f a@b.c
我设置了@oldmail=a@b.c“
,@newemail=”g@h.i“
,生成的表应为
email alternateEmail
g@h.i d@e.f
d@e.f g@h.i
我知道我可以用两个(或N个)语句来完成:
UPDATE users SET email=@newemail WHERE email=@oldemail
UPDATE users SET alternateEmail=@newemail WHERE alternateEmail=@oldEmail
但是我可以用一句话来表达吗?你可以这样做:
UPDATE users SET
email = case
when email = @oldemail then @newemail
else email
end,
alternateEmail = case
when alternateEmail = @oldemail then @newemail
else alternateEmail
end
where
email = @oldemail
or alternateEmail = @oldemail
您可以这样做:
UPDATE users SET
email = case
when email = @oldemail then @newemail
else email
end,
alternateEmail = case
when alternateEmail = @oldemail then @newemail
else alternateEmail
end
where
email = @oldemail
or alternateEmail = @oldemail
通常,如果在多个列中存储相同的“类型”数据,则这是数据模型损坏的标志。更好的设计是将电子邮件移出到一个单独的表中,该表可以包含所需的任意多行和一个额外的列,以指示(例如)每个电子邮件的优先级(如标准、备用等)。通常,如果在多个列中存储了相同的“种类”数据,则表示数据模型已损坏。更好的设计是将电子邮件移出到一个单独的表中,该表可以包含所需的任意多行,并增加一列以指示(例如)每封电子邮件的优先级(例如,标准、备用等),但实际上不会更改值的更新是否会最终被记录并增加事务大小?我想知道查询是否也应该有WHERE子句来限制update语句实际运行的行。@LasseV.Karlsen请注意,谢谢。错过了where条件。实际上不会更改值的更新是否会被记录并增加事务大小?我想知道查询是否也应该有WHERE子句来限制update语句实际运行的行。@LasseV.Karlsen请注意,谢谢。错过了哪里的条件。