存儲過程代碼如下所示:
CREATE PROCEDURE [dbo].[SP_BackupDB] ( @BackPath NVARCHAR(200), --備份路徑,如:D:\Backup\ @BackDbName NVARCHAR(50), --需要備份的數據庫名稱 @BackName NVARCHAR(50)=@BackDbName OUTPUT, --備份后的數據庫名稱,不需要.bak后綴。若不傳,則等同於@BackDbName @BackPathIsDate BIT=1, --備份路徑是否需要添加日期文件夾,默認添加 @BackNameIsTime BIT=1 --備份后的數據庫名稱是否需要追加當前時間,默認追加 ) AS BEGIN IF(@BackPathIsDate=1) BEGIN SET @BackPath=@BackPath + CONVERT(VARCHAR, GETDATE(), 112) +'\'; END ---------------------------創建文件夾 Begin--------------------------- DECLARE @FolderSQL NVARCHAR(MAX), @Return INT= 0; SET @FolderSQL = N'EXEC sp_configure ''show advanced options'',1 RECONFIGURE WITH OVERRIDE; EXEC sp_configure ''xp_cmdshell'',1 RECONFIGURE WITH OVERRIDE; EXEC @Return=xp_cmdshell ''mkdir ' + @BackPath + ''',NO_OUTPUT --調用DOS命令創建文件夾; EXEC sp_configure ''xp_cmdshell'', 0 RECONFIGURE WITH OVERRIDE; EXEC sys.sp_configure N''show advanced options'', N''0'' RECONFIGURE WITH OVERRIDE; '; --PRINT @FolderSQL; EXEC sp_executesql @FolderSQL, N'@Return INT OUTPUT', @Return OUTPUT; --SELECT @Return; --PRINT @Return ---------------------------創建文件夾 End--------------------------- ---------------------------備份數據庫 Begin--------------------------- DECLARE @NowTime VARCHAR(100); DECLARE @BackUpName VARCHAR(100); SET @NowTime=CONVERT(VARCHAR, GETDATE(), 112)+REPLACE(CONVERT(VARCHAR, GETDATE(), 108),':',''); /* IF(LEN(@BackName)<=0) BEGIN SET @BackName=@BackDbName; END */ IF(@BackNameIsTime=1) BEGIN SET @BackName=@BackName +'_'+ @NowTime; END SET @BackName=@BackName+'.bak'; SET @BackUpName=@BackPath + @BackName; BACKUP DATABASE @BackDbName TO DISK=@BackUpName WITH INIT; ---------------------------備份數據庫 End--------------------------- SELECT @BackName BackName,@BackPath BackPath,@BackPath + @BackName FullBackName; END GO
