background image

go

create proc pr_restore_db    /*恢复数据库*/

@flag varchar(20) out,    /*过程运行的状态标志,是输入参数*/      

@restore_db_name nvarchar(128),  /*要恢复的数据名字*/

@filename nvarchar(260)         /*备份文件存放的路径+备份文件名字*/

as

declare @proc_result tinyint  /*返回系统存储过程 xp_cmdshell 运行结果*/

declare @loop_time smallint  /*循环次数*/

declare @max_ids smallint    /*@tem 表的 ids 列最大数*/

declare @file_bak_path nvarchar(260)  /*原数据库存放路径*/

declare @flag_file bit   /*文件存放标志*/

declare @master_path nvarchar(260)  /*数据库 master 文件路径*/

declare @sql nvarchar(4000),@par nvarchar(1000)

declare @sql_sub nvarchar(4000)

declare @sql_cmd nvarchar(4000) 

/*

判断参数@filename 文件格式合法性,以防止用户输入类似 d: 

 

或者 c:\a\ 等非法文件名

参数@filename 里面必须有'\'并且不以'\'结尾

*/

if right(@filename,1)<>'\' and charindex('\',@filename)<>0

begin 

 select @sql_cmd='dir '+@filename

 EXEC @proc_result = master..xp_cmdshell @sql_cmd,no_output

 IF (@proc_result<>0)  /*系统存储过程 xp_cmdshell 返回代码值:0(成功)或 1(失败)*/

 begin

  select @flag='not exist'   /*备份文件不存在*/

  return  /*退出过程*/

 end

 /*创建临时表,保存由备份集内包含的数据库和日志文件列表组成的结果集*/