2010-11-02 146 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)