--得到备份路径:
create proc p_GetBakPath @file nvarchar(200) as
create table #t(logicalname nvarchar(200),
physicalname nvarchar(500),
type varchar(10),
filegroupname varchar(20),
size bigint,
maxsize bigint)
insert into #t exec('RESTORE FILELISTONLY FROM DISK = N''' + @file + '''')
select * from #t
go
--调用:
P_GetBakPath 'c:\备份文件名.bak'
===========================
declare @path varchar(8000)
--得到当前数据库的数据文件路径
select @path=rtrim(reverse(filename)) from sysfiles
select @path=reverse(substring(@path,charindex('\',@path),8000))
--显示结果
select 数据文件目录=@path
--得到SQL安装时设置的数据文件路径
select @path=rtrim(reverse(filename)) from master..sysfiles where name='master'
select @path=reverse(substring(@path,charindex('\',@path),8000))
--显示结果
select SQL数据文件目录=@path
-------------------
declare @path varchar(8000)
--根据安装路径得到默认的备份目录:
select @path=rtrim(reverse(filename)) from master..sysfiles where name='master'
select @path=substring(@path,charindex('\',@path)+1,8000),
@path=reverse(substring(@path,charindex('\',@path),8000))+'BACKUP'
--显示结果
select SQL默认备份目录=@path
-----------------------------------
declare @path varchar(200)
select @path = filename from master.dbo.sysfiles
set @path = ltrim(REVERSE(@path))
set @path = REVERSE(substring(@path,CHARINDEX('\',@path)+5,len(@path)))
print @path+'backup'
-------------------------------------
CREATE procedure sp_backDB @dbname varchar(100),@path varchar(100)
as
--create by Allen 2004-11-01 in order to backup database and verify database
declare @bakname varchar(100)
--declare @dbname varchar(100)
declare @sql varchar(8000)
--declare @sql1 varchar(8000)
--declare @path varchar(100)
--set @path='c:\'
--set @dbname='northwind'
set @bakname=@dbname+cast(datepart(weekday,getdate())-1 as varchar(1))
--星期日到星期六对应备份文件是bak0到bak6
set @sql='BACKUP DATABASE ['+@dbname+'] TO DISK=N'''+@path+''+@bakname+'.bak'' WITH INIT,NOUNLOAD,NOSKIP,STATS=10,NOFORMAT'
--print @sql
set @sql=@sql+' DECLARE @i INT
select @i = position from msdb..backupset where database_name='''+@dbname+'''and type!='''+'F'''+'
and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name='''+@dbname+''')
RESTORE VERIFYONLY FROM DISK = N'''+@path+''+@bakname+'.bak'''+' WITH FILE = @i'
--print @sql
exec(@sql) |