BAK 备份文件是SQL2000备份的,早先该BAK文件是通过以下语句恢复use master 
alter database DB set offline with rollback immediate
restore database DB from disk='D:\qqq.bak'
alter database DB set online with rollback immediate
use DB在SQL2000 MSDE 里,用Delphi程序执行以上语句可以恢复,但是在SQL 2008 R2 Express 里,这个语句在Delphi程序里执行,只会恢复字段,里面的数据根本不能恢复,如果用SQL 2008 R2 Express 执行,会报消息 3154,级别 16,状态 4,第 3 行
备份集中的数据库备份与现有的 'DB' 数据库不同。
消息 3013,级别 16,状态 1,第 3 行
RESTORE DATABASE 正在异常终止。 错误,如果把已经存在的DB数据库删除,SQL2008 执行以上语句可以恢复,或者用以下语句在SQL 2008里执行,也行。use master
drop database DB
restore database DB from disk='D:\qqq.bak'但是以上语句在Delphi程序里,在drop database DB就执行无效(不会报错),请问怎么在Delphi程序里往SQL 2008 数据库里恢复BAK文件 

解决方案 »

  1.   

    你要覆盖现在得数据库?那么用覆盖选项replace.如果不是,选择恢复到其他shu ju k
      

  2.   

    的确是要覆盖现有数据库,用restore database DB from disk='D:\qqq.bak' REPLACE 执行报告REPLACE附近语法错误,好像要加with mdf 到具体位置的mdf之类。但是具体位置不清楚,或者难以获取。为什么SQL 2000 MSDE 能执行的,怎么到SQL 2008 R2 Express 无法执行。
      

  3.   

    ALTER DATABASE DB_1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
    RESTORE DATABASE DB_1 FROM DISK = 'c:\2.bak'
    WITH Replace, MOVE 'DB_Data' TO 'd:\Data\DB_1.mdf', MOVE 'DB_log' TO 'd:\Data\DB_log.mdf' 
    ALTER DATABASE DB_1 SET MULTI_USER 
      

  4.   

    删了express上的库,然后再还原即可。
      

  5.   

    先确定 查询分析器里执行 和 delphi程序执行 的结果有没有区别
      

  6.   

    restore database DB from disk='D:\qqq.bak' with REPLACE 
      

  7.   

    MOVE........?,呵呵,我不想MOVE,或者我根本就不知道如何从Dephi获取该数据库的MDF和LDF文件在哪里,既然不知道在哪里,也就无从谈起MOVE。
      

  8.   

    restore database DB from disk='D:\qqq.bak' with REPLACE 
    with REPLACE,回去试试,谢谢。
      

  9.   

    在Delphi程序里删不掉,顶楼的问题贴里已经说明了。
      

  10.   

    其实只要你的程序在连着数据库就不能replace,所以可以考虑把连接切换到master,然后再replace,不过我觉得这个毕竟不是好办法。
      

  11.   

    版主哥哥,帮我看看这个帖子:http://bbs.csdn.net/topics/390475836期待解决,十分谢谢!
      

  12.   

    with replace,试了可以了,谢谢各位!