sqlserver使用存储过程实现数据库备份

CREATE PROC [dbo].[p_backupdb]
@dbname sysname='',          --要备份的数据库名称,不指定则备份当前数据库
@bkpath NVARCHAR(260)='',    --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfname NVARCHAR(260)='',   --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@bktype NVARCHAR(10)='DB',   --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@appendfile BIT=1,           --追加/覆盖备份文件
@password NVARCHAR(20)=''    --为备份文件设置的密码(仅sql2000支持),设置后,恢复时必须提供此密码
AS
    DECLARE @sql VARCHAR(8000)

    /* 判断要备份的数据库名称,为空则备份当前数据库*/
    IF ISNULL(@dbname,'')='' SET @dbname=DB_NAME()

    /* 判断备份文件的存放目录,为空则使用SQL默认的备份目录*/
    IF ISNULL(@bkpath,'')=''
    BEGIN
        SELECT @bkpath=RTRIM(REVERSE(filename)) FROM master..sysfiles WHERE name='master'
        SELECT @bkpath=SUBSTRING(@bkpath,CHARINDEX('\',@bkpath)+1,4000)
            ,@bkpath=REVERSE(SUBSTRING(@bkpath,CHARINDEX('\',@bkpath),4000))+'BACKUP\'
    END

    /*判断备份文件名,为空时指定默认文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间*/
    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),':',''))

    /* 拼接SQL */
    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
        +CASE ISNULL(@password,'') WHEN '' THEN '' ELSE ',PASSWORD='''+@password+'''' END

    /* 执行SQL */
    EXEC(@sql)

      
    /* 返回执行结果(1=成功,0=失败) */
    if(@@error=0) begin
        return 1
    end
        return 0


调用存储过程方式:

--备份当前数据库
exec p_backupdb @bkpath='c:\',@bkfname='\DBNAME\_\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'


原文链接:https://www.cnblogs.com/xuxing2016/p/7878432.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值