下面的存储过程适用:

1.一次想备份多个数据库。

2.只需要一步操作,在有存储过程的条件下。

3.可以根据自己的需要修改存储过程。

 

/*-----------------------------
	Description:
		1.Backup multiple Database
		2.If you want to backup database except 'master\model\msdb\tempdb',you can input '%' of the second parameter
		3.parameter 1 is the path where you want to back,parameter 2 is the database name you want to backup
		3.This procedure backup database with fuzzy database name
		
	Author:jiangxiaoqiang
	Date:2013-09-27
	Modify history:
-----------------------------*/




ALTER procedure [dbo].[sp_BackupDBBatch]
	@backup_path varchar(200),
	@backup_name varchar(200)
as
begin
	declare @DynamicSQL varchar(256)
	set @DynamicSQL='if not exist '+@backup_path+'\%Date:~0,4%%Date:~5,2%%Date:~8,2% mkdir '+@backup_path+'\%Date:~0,4%%Date:~5,2%%Date:~8,2%'
	exec xp_cmdshell @DynamicSQL
	
	declare @backup_path_detail varchar(200)
	set @backup_path_detail=@backup_path+'\'+CONVERT(char(8),GETDATE(),112)
	--declare variable
	DECLARE @dbname nvarchar(200)
	--SET @backup_path='D:\DatabaseBackup'--you can define by yourself
	/*
	 declare cursor syntax
	 DECLARE cursor_name CURSOR 
	 [LOCAL | GLOBAL] 
	 [FORWARD_ONLY | SCROLL] 
	 [STATIC | KEYSET | DYNAMIC | FAST_FORWARD] 
	 [READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] 
	 [TYPE_WARNING] 
	 FOR select_statement 
	 [FOR UPDATE [OF column_name [,...n]]] 
	*/
	DECLARE db_info CURSOR --declare cursor
	LOCAL
	STATIC
	READ_ONLY
	FORWARD_ONLY
	FOR --add other condition by select
    SELECT name
    FROM master.sys.databases with(NOLOCK)
    WHERE database_id>4 and name like '%'+@backup_name+'%'--maser,model,msdb,tempdb
	 --here you can add the condition like:name like'NJPEC%'
    OPEN db_info --open cursor
    FETCH NEXT FROM db_info INTO @dbname
   
    WHILE @@FETCH_STATUS=0
    BEGIN
	 EXEC master.dbo.backupDB @dbname,@backup_path_detail
	 FETCH NEXT FROM db_info INTO @dbname
    END
    CLOSE db_info
    DEALLOCATE db_info
---------------------------END--------------------------------
   --Find&list all database
   /*
    select * 
    from master.sys.databases
    order by database_id;
   */
end

 

ALTER PROC [dbo].[backupDB] 
(
  --We'd better add bracket even if no parameters
  @DatabaseName nvarchar(200), 
  @Path nvarchar(200)
)
AS
BEGIN
 DECLARE @FileName varchar(200),@sql varchar(1000)
 --RIGHT function:return the @Path last X word
 --CONVERT function:CONVERT(data_type(length),data_to_be_converted,style)
 --112 representative yymmdd format
 --108 representative hh:mm:ss format
  SET @FileName=@Path+(CASE WHEN RIGHT(@Path,1)<>'\' THEN '\' ELSE '' END)
           +@DatabaseName+'_'+CONVERT(char(8),GETDATE(),112)+'_' 
           +replace(convert(char(8),getdate(),108),':','')+'.bak'
  --to explain the ''':the ' before to and the last ' was a couple.
  --the backup folder must be exists,and N must be uppercase.
  --what's the 'N' meaning?It means the varible using code with unicode.
  SET @sql='backup database '+@DatabaseName+' to disk =N'''+@FileName+''''
  EXEC(@sql)
 END

 数据非常重要,本脚本为学习交流用,正式数据库还请制定详细备份解决方案,欢迎大家提出改进意见。