远程调取过来的数据库bak,大概五六十个。要把它恢复到本机上,一个一个太麻烦了,该怎么搞?NetDetective20110415.bak
NetDetective20110416.bak
NetDetective20110417.bak……………………
NetDetective20110613.bak

解决方案 »

  1.   

    难道要恢复成五六十个数据库???按还原数据库的SQL语句,去拼接动态执行的字符串吧!
      

  2.   

    what can i do?我不会啊。。
      

  3.   

    --try
    declare @str nvarchar(max)
    select @str=isnull(@str,'')+'RESTORE DATABASE NetDetective'+dt+' from disk=N''D:\baks\'+dt+'.bak'' with RESTRICTED_USER, FILE = 1, NOUNLOAD, REPLACE, STATS = 10 ' 
    from(
    select convert(varchar(8),dateadd(d,number,'20110415'),112)dt from master..spt_values where type='p' and dateadd(d,number,'20110415')<='20110613'
    )t
    exec (@str)
    --or try
    declare @dt datetime
    declare @str nvarchar(max)
    set @dt='20110415'
    while @dt<='20110613'
      begin
    set @str='RESTORE DATABASE NetDetective'+@dt+' from disk=N''D:\baks\'+@dt+'.bak'' with RESTRICTED_USER, FILE = 1, NOUNLOAD, REPLACE, STATS = 10 '
    exec(@str)
    set @dt=convert(varchar(8),dateadd(d,1,@dt),112)
      end
    go
    不过,除非数据库特多,不提倡这样处理,还是手动处理为好,因为,你不知道备份是否为被追加的备份.
      

  4.   

    [code=BatchFile]@echo off
    rem 批处理就要反过来写了,当前xp_cmdshell反过来一样
    Set BakFilePath=c:\test
    for /f "delims=" %%i in ('dir %BakFilePath%\*.bak /b /a-d') do (
    osql -E -Q "restore database %%~ni From Disk='%%~dpnxi'"
    )
    osql -S .\SQL2005 -E -Q "select name from sysdatabases"
    pause>nul
    [/code]
      

  5.   


    对文件 "d:\Program Files\Rainsoft\NetDetective\Database\NDHistoryLogBak.mdf" 的目录查找失败,出现操作系统错误 3(系统找不到指定的路径。)。
    消息 3156,级别 16,状态 3,第 1 行
    文件 'NDHistoryLogBak' 无法还原为 'd:\Program Files\Rainsoft\NetDetective\Database\NDHistoryLogBak.mdf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
    消息 5133,级别 16,状态 1,第 1 行
    对文件 "d:\Program Files\Rainsoft\NetDetective\Database\NDHistoryLogBak_log.ldf" 的目录查找失败,出现操作系统错误 3(系统找不到指定的路径。)。
    消息 3156,级别 16,状态 3,第 1 行
    文件 'NDHistoryLogBak_log' 无法还原为 'd:\Program Files\Rainsoft\NetDetective\Database\NDHistoryLogBak_log.ldf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
    消息 3119,级别 16,状态 1,第 1 行
    在计划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。