ifexists(
select*fromsysobjects
wherename='pr_backup_db'andxtype='p'
)
begin
dropprocpr_backup_db
end
go
/*备份数据库*/
createprocpr_backup_db
@flagvarchar(10)out,
@backup_db_namevarchar(128),
@filenamevarchar(1000) --路径+文件名字
as
declare@sqlnvarchar(4000),@parnvarchar(1000)
select@par='@filenamevarchar(1000)'
select@sql='BACKUPDATABASE'+@backup_db_name+'todisk=@filenamewithinit'
executesp_executesql@sql,@par,@filename
select@flag='ok'
go
ifexists(
select*fromsysobjects
wherename='fn_GetFilePath'andxtype='fn'
)
begin
dropfunctionfn_GetFilePath
end
go
/*创建函数,得到文件得路径*/
createfunctionfn_GetFilePath(@filenamenvarchar(260))
returnsnvarchar(260)
as
begin
declare@file_pathnvarchar(260)
declare@filename_reversenvarchar(260)
select@filename_reverse=reverse(@filename)
select@file_path=substring(@filename,1,len(@filename)+1-charindex('/',@filename_reverse))
return@file_path
end
go
ifexists(
select*fromsysobjects
wherename='pr_restore_db'andxtype='p'
)
begin
dropprocpr_restore_db
end
go
createprocpr_restore_db /*恢复数据库*/
@flagvarchar(20)out, /*过程运行的状态标志,是输入参数*/
@restore_db_namenvarchar(128), /*要恢复的数据名字*/
@filenamenvarchar(260) /*备份文件存放的路径+备份文件名字*/
as
declare@proc_resulttinyint /*返回系统存储过程xp_cmdshell运行结果*/
declare@loop_timesmallint /*循环次数*/
declare@max_idssmallint /*@tem表的ids列最大数*/
declare@file_bak_pathnvarchar(260) /*原数据库存放路径*/
declare@flag_filebit /*文件存放标志*/
declare@master_pathnvarchar(260) /*数据库master文件路径*/
declare@sqlnvarchar(4000),@parnvarchar(1000)
declare@sql_subnvarchar(4000)
declare@sql_cmdnvarchar(4000)
/*
判断参数@filename文件格式合法性,以防止用户输入类似d:或者c:/a/等非法文件名
参数@filename里面必须有'/'并且不以'/'结尾
*/
ifright(@filename,1)<>'/'andcharindex('/',@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='notexist' /*备份文件不存在*/
return /*退出过程*/
end
/*创建临时表,保存由备份集内包含的数据库和日志文件列表组成的结果集*/
createtable#tem(
LogicalNamenvarchar(128),/*文件的逻辑名称*/
PhysicalNamenvarchar(260),/*文件的物理名称或名称*/
Typechar(1), /*数据文件(D)或日志文件(L)*/
FileGroupNamenvarchar(128),/*包含文件的文件组名称*/
[Size]numeric(20,0), /*当前大小(以字节为单位)*/
[MaxSize]numeric(20,0) /*允许的最大大小(以字节为单位)*/1