您的位置:首页 > 数据库

利用SQLServer备份文件创建数据库(针对C/S系统)

2007-08-18 01:26 645 查看
create procedure P_databaseInit
 @bakFileName varchar(128)=null,--备份文件位置以及名称如:d:/bak.bak
 @DataBaseName varchar(128)=null,--新数据库名称如:myTestDb
 @dbPath varchar(128)=null, --新数据路径如:d:/或d:
 @replace bit=0 --是否强制制恢复,如果遇到同名的数据库是否牵制恢复
as
 create  table #tmp(  --建立临时表用来存储备份文件信息
     LogicalName nvarchar(128),
     PhysicalName nvarchar(260),
     Type char(1),
     FileGroupName nvarchar(128),
     Size numeric(20,0),
     MaxSize numeric(20,0))

 --insert into #tmp Exec #p_getBakFileList
 insert into #tmp exec('RESTORE   FILELISTONLY   FROM   DISK   =   ''e:/motorbak.bak''')   --获取备份文件信息存入临时表

 declare @LogicalName varchar(128),@restoreStr varchar(5000),@PhysicalName varchar(260)

 declare myCur cursor
   for
   select LogicalName,physicalName from #tmp

 if substring(reverse(@dbPath),1,1)<>'/'  --新数据库路径处理,当然路径先要建立好来。可以在其他语言中处理
    set @dbPath=@dbPath+'/';
 if @replace=1  --处理是否强制还原
    set @restoreStr ='restore database '+@DataBaseName+' from disk='''+@bakFileName+'''with recovery,replace';
 else
   set @restoreStr ='restore database '+@DataBaseName+' from disk='''+@bakFileName+'''with recovery';
 open myCur
   fetch next from myCur into  @logicalName,@PhysicalName
   while (@@fetch_status=0)
     begin      
       set @physicalName=reverse(subString(reverse(@physicalName),1,charIndex('/',reverse(@physicalName),1)-1)) --获取原来的物理文件名
       set @restoreStr=@restoreStr+',move '''+@logicalName+''' to '''+@dbPath+@physicalName+''''
       fetch next from myCur into  @logicalName,@PhysicalName
     end
  exec @restoreStr 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐