2010-11-02 163 views
1

我需要对列值进行批量更新。如果有问题,我需要能够将列恢复为之前的值。所以我将这些值备份到临时表中。备份和恢复列值

顺便说一句,我正在使用Oracle。

CREATE TABLE tmp_trial_date_backup AS SELECT cust_id, trial_days FROM customer 
WHERE (trial_days = 0 or trial_days = -99) 

随后我将执行更新。

UPDATE customer SET trial_days = 1 WHERE (trial_days = 0 or trial_days = -99) 

我的追求是...我如何从我创建了TMP表恢复列的值?做

+0

您使用的数据库是? – 2010-11-02 10:37:00

+0

是否有任何理由不能只是做一个'ROLLBACK'来恢复这个变化(也就是说为什么你在检查之前是否承诺有什么问题?) – 2010-11-03 04:02:14

+1

这个变化将会直播出去,因此问题可能不会出现,直到也许1或2天。在这一点上,我需要一个退出策略。 – 2010-11-03 11:37:19

回答

1

以下更新SQL Server数据库上重置从customer的trial_days。

UPDATE c 
SET  trial_days = tmp.trial_days 
FROM customer c 
     INNER JOIN tmp_trial_date_backup tmp ON tmp.cust_id = c.cust_id 

也许更容易可能是一列trial_days_backup添加到customer表。

+0

我应该提到我在oracle上。但是,谢谢你。 – 2010-11-02 10:45:42

1

最后我做了以下工作。

UPDATE customer c SET trial_days = (SELECT trial_days from tmp_trial_days_backup 
where tmp_trial_days_backup.cust_id = customer_bond.cust_id) 
WHERE EXISTS (SELECT 1 from tmp_trial_days_backup tmp WHERE tmp.cust_id = c.cust_id)