利用关联查询更新一个表中的字段值等于等于另一个表的字段值

先说一下我的惨痛经历。我在操作数据库时,出现了两次重大失误,第一次是更新语句没有加where字句。第二次是加了where字句,但是条件写的不对,没有选对主键。想当然的以为第一个就是主键,谁知道它不是,第一个字段的竟然值都一样。两次都是本来想更新一条数据,结果更新了整张表。第一次是技术总监把数据恢复了,第二次是我自己恢复了。所以在更新数据库时一定不要忘了加where字句,加了where字句也要在更新之前再次检查where查询出来的记录条数和你想要更新的条数是否一致。三思而后行啊。


下面说一下第二次的情况:
有两张用户表,表结构如下
这里写图片描述这里写图片描述
两张表关联的字段是UserId,applicationId是每条记录值都一样。我想要更新MemberShip的email值,结果把applicationId当作了主键,写成了where字句的条件,然后更新了整张表。错误操作后截图如下:
这里写图片描述
下面是我的恢复数据的sql语句

begin tran
update m
set m.Email=u.UserName
from aspnet_Membership m ,aspnet_Users u
where m.UserId=u.UserId

update aspnet_Membership set Email=Email+'@default.com'

update aspnet_Membership set LoweredEmail=Email

select * from aspnet_Membership
commit tran
rollback tran

这样就把User表中的UserName的值根据UserId的关联关系修改了MemberShip中的Emai的值。一共有将近800条记录啊,要是手动修改,得改到什么时候啊。

猜你喜欢

转载自blog.csdn.net/parade0393/article/details/79384590
今日推荐