我昨天有一个数据库的备份y.bak,然后今天早上被删除了些记录,后面又添加了些记录。现在我想通过昨天的备份把删除掉的记录补上,但要保存后来新添加的记录,该怎么做?等待高手出手相助,不胜感激!ORZ   拜倒!

解决方案 »

  1.   

    把数据库恢复,然后 :insert 目标库名.dbo.表名 select * from 刚恢复的库名.dbo.表名 where ID=被删除记录的ID
      

  2.   

    导入的时候会不会丢失关联信息?比如以前id=123,导入的id还保持123?
    原因是多个表的多条数据被删,是因为删除了几条客户数据,所以相关的发货数据、拜访记录等都被删除。
    有没有可能对比两个数据库,比如在2010//5/4 12:00前缺失的记录自动恢复?
      

  3.   

    如果是自增列,会比较好处理 ,你后面新增的不会覆盖删除过的ID,直接用SQL语句就能完成恢复操作。
      

  4.   

    假设两个库名分别为dbold(原备份的),dbnew(现在使用的),要恢复数据的表名为tb,执行以下脚本:use dbnew
    go
    set identity_insert tb on
    go
    declare @s varchar(8000)
    select @s=isnull(@s+',','')+quotename(name) from syscolumns where id=object_id('tb')
    exec('insert tb('+@s+') select * from dbold.dbo.tb t where not exists(select 1 from tb where id=t.id)')
    go
    set identity_insert tb off
    go
      

  5.   

    用log explorer看删除了什么数据,就加入那些数据
      

  6.   

    Log Explorer 三方工具即可解决
      

  7.   

    具体表结构具体分析,要注意insert的顺序的,如果有约束等等。
      

  8.   

    如果数据真的这么重要,那就用备份再还原出另一个库,然后将两个库进行比较。
    比较数据的工具,我用过 toad for sqlserver,效果很好
      

  9.   

    结贴!
    我发现我的log文件只有几百k,用Log Explorer查看不到日志,所以作罢了。
    htl258的方法是可行的,代码有一点点小问题,@s的值是按字段名排序的,所以后面不能直接select * ,我把正确的贴出来,希望对大家在以后遇到类似问题有所帮助,还有就是稍微麻烦点,先要找到被删除的表名。我用sqlDiff查看的,然后每个表写一段代码。use WacDB2
    go
    set identity_insert ClientList on
    go
    declare @s varchar(8000)
    select @s=isnull(@s+',','')+quotename(name) from syscolumns where id=object_id('ClientList')
    exec('insert ClientList('+@s+') select '+@s+' from WacDB3.dbo.ClientList t where not exists(select 1 from ClientList where id=t.id)')
    go
    set identity_insert ClientList off
    go