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

该博客介绍了一个SQLServer存储过程P_databaseInit,用于根据指定的备份文件创建新的数据库。该过程首先创建一个临时表存储备份文件信息,然后通过RESTORE FILELISTONLY命令获取这些信息。接着,它处理新数据库的路径,并根据是否强制恢复的参数决定恢复选项。最后,通过游标遍历临时表,将逻辑名称和物理名称进行移动操作,完成数据库的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值