2010-10-07 57 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