既能备份到网络中的共享文件夹中,也能备份到本地

 USE [AdventureWorks2012]
GO
/****** Object: StoredProcedure [dbo].[pr_BatchBackUPDatabase] Script Date: 2016/1/7 17:56:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO ------------执行此脚本需要先执行表值函数---------
--use [AdventureWorks2012]
--go
---- =============================================
---- 调用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',')
---- Create date: <Create Date,,>
---- Description: 把用逗号分隔的字符串转换成表格数据
---- =============================================
--CREATE FUNCTION [dbo].[Fn_StringSplitToTable]
--(
-- @StringX varchar(MAX),
-- @Split nvarchar(10)
--)
--RETURNS
--@IdsTable TABLE
--(
-- [Id] nvarchar(200)
--)
--AS
--BEGIN
-- DECLARE @Index int
-- DECLARE @LenIndex int
-- SET @LenIndex=LEN(@Split)
-- SET @Index=CHARINDEX(@Split,@StringX,1)
-- WHILE (@Index>=1)
-- BEGIN
-- IF(LEFT(@StringX,@Index-1) <> '')
-- INSERT INTO @IdsTable SELECT LTRIM(RTRIM(LEFT(@StringX,@Index-1)))
-- SET @StringX=RIGHT(@StringX,LEN(@StringX)-@Index-@LenIndex+1)
-- SET @Index=CHARINDEX(@Split,@StringX,1)
-- END
-- IF(@StringX<>'') INSERT INTO @IdsTable SELECT LTRIM(RTRIM(@StringX)) -- RETURN
--END ----------执行此脚本需要开启xp_cmdshell---------
--USE Master
--GO
--EXEC sp_configure 'show advanced options', 1;
--GO
--RECONFIGURE WITH OVERRIDE;
--GO
--EXEC sp_configure 'xp_cmdshell',1;
--GO
--RECONFIGURE WITH OVERRIDE;
--GO
--==================================================
--<Author> limy
--<Create Date> 2015-12
--数据库备份
--exec pr_BatchBackUPDatabase @BackupDirectoryPath='\\192.168.0.130\DBShare', @DataBase='4', @SelectedDataBase='AdventureWorks2012', @SubDirectoryMode=1, @ExtenName='bak',@BackUpType=1,@IsCompress=1
--exec pr_BatchBackUPDatabase @BackupDirectoryPath='D:\db', @DataBase='4', @SelectedDataBase='AdventureWorks2012', @SubDirectoryMode=1, @ExtenName='bak', @BackUpType=1,@IsCompress=1
--exec pr_BatchBackUPDatabase @BackupDirectoryPath='D:\db', @DataBase='4', @SelectedDataBase='AdventureWorks2012', @SubDirectoryMode=1, @ExtenName='trn', @BackUpType=2,@IsCompress=1
--exec pr_BatchBackUPDatabase @BackupDirectoryPath='D:\db', @DataBase='4', @SelectedDataBase='AdventureWorks2012', @SubDirectoryMode=1, @ExtenName='dif', @BackUpType=3,@IsCompress=1
--====================================================
ALTER PROCEDURE [dbo].[pr_BatchBackUPDatabase]
@BackupDirectoryPath NVARCHAR(50)='C:\',
@DataBase TINYINT = 1,--1 所有数据库,2 系统数据库,3 所有用户数据库,4 指定数据库
@SelectedDataBase NVARCHAR(1000)='', --指定的数据库
@SubDirectoryMode BIT = 1,--是否为每个数据库创建子目录
@ExtenName NVARCHAR(50)='bak',--备份文件扩展名(不要.)
--@CheckDB bit = 0, --验证备份完整性
@BackUpType TINYINT = 1, --1 完整备份 2 日志备份, 3 差异备份
@IsCompress BIT = 0 --是否备份压缩
AS
BEGIN --要备份的数据列表
DECLARE @dbname TABLE(
DbName VARCHAR(100) )
--已经存在的数据库目录
DECLARE @DirExistName TABLE(
DbName VARCHAR(100) )
declare @SQL nvarchar(500)
declare @ErrorInfo nvarchar(1000) --数据库的值是否合理
if(@DataBase not in(1,2,3,4))
begin
SET @ErrorInfo = N'1 所有数据库,2 系统数据库,3 所有用户数据库,4 指定数据库 ,请选择要备份的数据库!'
RAISERROR(@ErrorInfo,16,1)
RETURN;
end --是否指定了数据库
if @DataBase=4 and isnull(@SelectedDataBase,'')=''
begin
SET @ErrorInfo = N'要备份的数据库为指定数据库时,请输入数据库,多个数据库中间用[,]隔开!'
RAISERROR(@ErrorInfo,16,2)
RETURN;
end --把要备份的数据库,放到一个表里
--1 所有数据库
if @DataBase=1
begin
insert into @dbname
select name from master..sysdatabases where name <>'tempdb'
end
--2 系统数据库
if @DataBase=2
begin
insert into @dbname
select name from master..sysdatabases where sid = 0x01 and name <>'tempdb'
end
--3 所有用户数据库
if @DataBase=3
begin
insert into @dbname
select name from master..sysdatabases where sid <> 0x01 and name <>'tempdb'
end
--4 指定数据库
if @DataBase=4
begin
insert into @dbname
SELECT Id FROM [Fn_StringSplitToTable](@SelectedDataBase,',')
end --循环表,创建子目录
declare @name nvarchar(100)
declare cur cursor for
select DbName from @dbname
open cur
fetch next from cur into @name
while(@@fetch_status=0)
begin
--完备
declare @strDate varchar(30),@backupFile varchar(200),@currentDate datetime,@backName nvarchar(100)--@Day varchar(20),
set @currentDate=getdate()
set @strDate=format(getdate(),'yyyyMMdd_HHmmss')
set @backName=@name+N'-完整 数据库 备份' set @backupFile = @BackupDirectoryPath+'\'+@name +'_'+@strDate+'.bak' --是否为每个数据库创建子目录
if @SubDirectoryMode =1
begin set @SQL = 'xp_cmdshell ''dir '+@BackupDirectoryPath+' /b /a:d'''
insert into @DirExistName
exec (@SQL)
----调试用-------------------------------------------------------------------------------------------------------------------
--RAISERROR(@SQL,16,2) ;RETURN;-----------------------------------------------------------------------------------
if not exists(select 1 from @DirExistName where DBName=@name)
begin
set @SQL='xp_cmdshell ''mkdir '+@BackupDirectoryPath +'\'+@name+''''
exec ( @SQL )
end set @backupFile = @BackupDirectoryPath+'\'+@name+'\'+@name +'_'+@strDate+'.'+@ExtenName
end IF(@BackUpType=1)--完整备份
BEGIN
--开始备份
if @IsCompress=1
begin
backup database @name to disk=@backupFile WITH NOINIT, NAME = @backName, COMPRESSION
end
else
begin
backup database @name to disk=@backupFile WITH NOINIT, NAME = @backName, NO_COMPRESSION
end
END
IF(@BackUpType=2)--日志备份
BEGIN
--开始备份
if @IsCompress=1
begin
backup log @name to disk=@backupFile WITH NOINIT, NAME = @backName, COMPRESSION
end
else
begin
backup log @name to disk=@backupFile WITH NOINIT, NAME = @backName, NO_COMPRESSION
end
END IF(@BackUpType=3)--差异备份
BEGIN
--开始备份
if @IsCompress=1
begin
backup database @name to disk=@backupFile WITH differential ,NOINIT, NAME = @backName, COMPRESSION
end
else
begin
backup database @name to disk=@backupFile WITH differential,NOINIT, NAME = @backName, NO_COMPRESSION
end
END fetch next from cur into @name
end
close cur
deallocate cur print N'备份完成。';
return; END

SQL Server 2012 数据库备份的更多相关文章

  1. SQL SERVER 2012数据库自动备份的方法

    SQL SERVER 2012数据库自动备份的方法 为了防止数据丢失,这里给大家介绍SQL SERVER2012数据自动备份的方法: 一.打开SQL SERVER 2012,如图所示: 服务器类型:数 ...

  2. SQL Server 2012完全备份、差异备份、事务日志备份和还原操作;

    SQL Server 2012完全备份.差异备份.事务日志备份和还原操作: 1.首先,建立一个测试数据库,TestA:添加一张表,录入二条数据:备份操作这里我就不详细截图和讲解了.相信大家都会备份,我 ...

  3. SQL Server 2012 数据库笔记

    慕课网 首页 实战 路径 猿问 手记     Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...

  4. SQL Server系统数据库备份最佳实践

    原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: 系统数据库 master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信 ...

  5. SQL SERVER 2012数据库:开启防火墙导致外部无法连接数据库解决办法

    SQL SERVER 2012数据库:开启防火墙导致外部无法连接数据库解决办法 将以下代码存为OpenSqlServerPort.bat文件: netsh advfirewall firewall a ...

  6. SQL Server 2005数据库定期备份(非常详细)与 SQL Server 2005数据库备份定期清理

     SQL Server 2005数据库定期备份 分类: SQL Server 20052011-01-06 16:25 3320人阅读 评论(1) 收藏 举报 sql server数据库sqlserv ...

  7. Sql Server 2012数据库的安装【自己一点一点敲的】

    Sql Server 2012数据库的安装 1.到微软官网上下载 下载链接为:https://www.microsoft.com/zh-cn/download/details.aspx?id=2906 ...

  8. Microsoft SQL server 2012数据库学习总结(一)

    一.Microsoft SQL Server2012简介 1.基本概要 Microsoft SQL Server 2012是微软发布的新一代数据平台产品,全面支持云技术与平台,并且能够快速构建相应的解 ...

  9. Microsoft SQL Server 2012 数据库安装图解教程

    本文部分引用以下文章: SQL Server 2012 安装图解教程(附sql2012下载地址)_MsSql_脚本之家 http://www.jb51.net/article/36049.htm SQ ...

随机推荐

  1. Asp.net内置对象之Request对象(概述及应用)

    Request对象主要用于获取来自客户端的数据,如用户填入表单的数据.保存在客户端的Cookie等,本文将围绕Request对象,讲解其的主要作用:读取窗体变量.读取查询字符串变量.取得Web服务器端 ...

  2. Sobel边缘检测算法(转载)

    转载请注明出处:  http://blog.csdn.net/tianhai110 索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰 ...

  3. HDU 5918 KMP/模拟

    Sequence I Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  4. php部分(查看文件、建立站点、语法变量、变量的几个方法、“全局局部变量的调用”、static、函数参数的作用域);

    浏览器查看php文件: 建立站点,浏览php文件: php的语法 <?php echo "Hello World!"; ?> 注释语法: <?php // 这是 ...

  5. leetcode 102 Binary Tree Level Order Traversal ----- java

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  6. 使用配置方式进行ssh的整合以及管理员管理的案例(二)

    (续) 删除Hibernate配置文件的写法: 在applicationContext.xml中添加数据库操作的相关配置: <!-- 配置数据库连接池 -->    <bean id ...

  7. px em rem在WEB前端开发中的区别

    我们都知道基于像素的字体大小所用的单位是px,但是随着响应式设计的不断火热,基于相对字体大小的单位em变开始流行起来.当然,rem也在Web前端开发人员讨论如何更好设置字体大小的讨论话题之列.是不是需 ...

  8. C++@重载函数

    关于重载详细分析参考: http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html 内部机制涉及重载函数如何解决命名冲突,调用匹配的问题 ...

  9. SyntaxError: Non-ASCII character '\xe6'

    这是编码的问题,在文件第一行加上如下命令即可: #encoding: utf-8

  10. SET ROWCOUNT,SET NOCOUNT

    SET ROWCOUNT (Transact-SQL) 在停止特定查询之前要处理的行数(整数). 重要提示 在 SQL Server 的将来版本中,使用 SET ROWCOUNT 将不会影响 DELE ...