(精)如何利用T_SQL实现数据库备份与还原处理之一--(如何利用sql语句,正确备份数据库)

 /*2.--备份数据库*/---引用于邹建 2003.10
/*--调用示例
--备份当前数据库
exec p_backupdb @bkpath='c:/',@bkfname='db_/DATE/_db.bak'
--差异备份当前数据库
exec p_backupdb @bkpath='c:/',@bkfname='db_/DATE/_df.bak',@bktype='DF'
--备份当前数据库日志
exec p_backupdb @bkpath='c:/',@bkfname='db_/DATE/_log.bak',@bktype='LOG'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_backupdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_backupdb]
GO

定义存储过程:
Create proc p_backupdb
@dbname sysname='',   --要备份的数据库名称,不指定则备份当前数据库
@bkpath nvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfname nvarchar(260)='', --备份文件名,文件名中可以用/DBNAME/代表数据库名,/DATE/代表日期,/TIME/代表时间
@bktype nvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@appendfile bit=1   --追加/覆盖备份文件
as
 declare @sql varchar(8000)
 if isnull(@dbname,'')='' set @dbname=db_name()
 if isnull(@bkpath,'')='' set @bkpath=dbo.f_getdbpath(null)
 if isnull(@bkfname,'')='' set @bkfname='/DBNAME/_/DATE/_/TIME/.BAK'
 set @bkfname=replace(replace(replace(@bkfname,'/DBNAME/',@dbname)
  ,'/DATE/',convert(varchar,getdate(),112))
  ,'/TIME/',replace(convert(varchar,getdate(),108),':',''))
 set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname
  +' to disk='''+@bkpath+@bkfname
  +''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end
  +case @appendfile when 1 then 'NOINIT' else 'INIT' end
 print @sql
 exec(@sql)
go

 简单描述:
1.没有定义返回值,但是定义了五个参数;此处,特别注意备份类型的定义
(备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份)
2.上述用到的sql函数:
ISNULL:替换成空值;
db_name():获取当前数据库名称;
f_getdbpath:返回得到的存放目录,自定义的函数,请留意上一页;
replace:替换某些值;

你可能感兴趣的:(sql,数据库,object,database,Go,disk)