张晨的个人博客

Sql server 2008数据库update使用join更新找回丢失数据

张晨的个人博客2015-01-13综合技术 2684 0A+A-

    上周有一位客户因为更新问题,把批次表(tbl_sh_batch)中管理的drugs_id都更新成了NULL,因为客户下班后服务器机,导致数据库没有进行备份操作,当时没有使用过join方式更新,所以感觉除了手动修改感觉一筹莫展,后来同事提醒找了下资料,顺利解决数据丢失的问题。

    Sql server 2008数据库是可以通过join连接其他表进行更新的,也可以连接到其他数据库的表进行更新:

一、join同一个数据库的不同表

UPDATE e SET e.drug_id = d.drug_id
       FROM tbl_sh_batch e
       INNER JOIN 
(SELECT drug_id,storageList_code,drugs_batchNo FROM tbl_sh_related_import WHERE drugs_batchNo is not null) d on e.batchNo = d.drugs_batchNo


二、join不同数据库的表进行更新

UPDATE e SET e.drug_id = d.drug_id
       FROM [gpwms].[dbo].[tbl_sh_batch] e
       INNER JOIN 
(SELECT drug_id,ID FROM [gpwms_old].[dbo].[tbl_sh_batch] WHERE drug_id is not null) d on e.ID = d.ID
WHERE e.batchNo is null



备注:

一是因为今年11月份的时候对该客户系统进行了更新,包括数据库也一并更新了,新库可以通过导入表(tbl_sh_related_import)的drug_id字段找回,但是因为更新前的数据drug_id字段是没有值的,但是可以通过旧库(gpwms_old)中的批次表(tbl_sh_batch)从旧数据中直接把drug_id找回。

文章关键词
update
join
sql找回数据
发表评论