2010-10-07 86 views
0

假設我有一個表與下面的模式:表恢復問題

TABLEID
字段1
場2
.....

我有我的數據庫的兩個副本(備份和製作)。在生產實例,查詢卻意外地運行其做了以下內容:

Update table set field2 = null where field1 = 'x'; 

我試圖撤消基於存儲在備份實例(哪裏不好update語句不運行)的數據這個查詢。

我需要在備份數據庫上運行哪些SQL語句來檢索fieldId和table2的值?我如何將其轉換爲適當的更新報表來修復生產?可能會有很多行受到查詢的影響。

我想,我可以用下面的查詢選擇備份擦除值:

Select tableId, field2 where field1 = 'x'; 

不過,我在一個關於如何將其轉換成一個簡單的更新語句損失。任何洞察力(或更好的想法)將不勝感激。

回答

0

您需要在同一個數據庫中更新數據,因此當您從備份中選擇field1 ='x'時,請將其保存到臨時表中並將其複製到生產表中。

您還需要在這兩個表之間使用某種主鍵 - 如果您沒有這些,您怎麼知道哪個field2需要更新?

舉例來說,如果你的表有

field1 field2 
x  5 
x  9 
x  null 
y  5 

,現在有

field1 field2 
x  null 
x  null 
x  null 
y  5 

,如果有其他的領域,你將如何從X/9區分正確記錄X/5,更重要的是,從更新之前爲空的field2?

如果你有某種形式的主鍵,那麼你可以更新表1(場2)作爲選擇Field2從backuptable其中table1.field1 = backuptable

+0

2 followups:在TABLEID是唯一的主整數鍵和兩個數據庫位於不同的計算機上,那麼您是否建議將備份中的錶轉儲到生產中的表上? – Visitor 2010-10-08 00:05:24

+0

是,在生產數據庫中創建備份表的臨時副本。實際上,一個更好的選擇是在備份中製作破損的生產表的臨時副本,並在那裏工作。一旦良好,然後將該數據複製回生產。 – thursdaysgeek 2010-10-11 20:21:17