--失掉恢复后的数据库寄存目次
ifisnull(@dbpath,)=
begin
select@dbpath=rtrim(reverse(filename))frommaster..sysfileswherename=master
select@dbpath=reverse(substring(@dbpath,charindex(,@dbpath),4000))
end
--增加挪动逻辑文件的处置
if@retype=DBor@retype=DBNOR
begin
--从备份文件中猎取逻辑文件名
declare@lfnnvarchar(128),@tpchar(1),@iint,@svarchar(1000)
--创立一时表,保留猎取的信息
createtable#tb(lnnvarchar(128),pnnvarchar(260),tpchar(1),fgnnvarchar(128),sznumeric(20,0),Msznumeric(20,0))
--从备份文件中猎取信息
set@s=restorefilelistonlyfromdisk=+@bkfile+
++caseisnull(@password,)whenthenelsewithPASSWORD=+@password+end
insertinto#tbexec(@s)
declare#fcursorforselectln,tpfrom#tb
open#f
fetchnextfrom#finto@lfn,@tp
set@i=0
while@@fetch_status=0
begin
select@sql=@sql+,move+@lfn+to+@dbpath+@dbname+cast(@iasvarchar)
+case@tpwhenDthen.mdfelse.ldfend
,@i=@i+1
fetchnextfrom#finto@lfn,@tp
end
close#f
deallocate#f
end
--封闭用户历程处置
if@overexist=1and@killuser=1
begin
declarehCForEachcursorfor
selects=kill+cast(spidasvarchar)frommaster..sysprocesses
wheredbid=db_id(@dbname)
execsp_msforeach_worker?
end