USE [wechat] GO /****** Object: StoredProcedure [dbo].[p_backupdb] Script Date: 2017/11/22 11:38:23 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO 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() 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 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 +CASE ISNULL(@password,'') WHEN '' THEN '' ELSE ',PASSWORD='''+@password+'''' END EXEC(@sql) GO
調用存儲過程方式:
--備份當前數據庫 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'
