做数据库备份作业的时候..想按日期建立文件夹..

首先要判断文件夹是否存在

DECLARE @PATH VARCHAR(255)  --路径
DECLARE @DATE VARCHAR(255) --日期 例如: 20171011
SET @DATE=CAST(DATEPART(YYYY,GETDATE()) AS VARCHAR)+CAST(DATEPART(MM,GETDATE()) AS VARCHAR)+CAST(DATEPART(DD,GETDATE()) AS VARCHAR)
SET @PATH = 'E:\SQL2012_BAK\'+@DATE+'\'
DECLARE @TEMP TABLE(A INT,B INT,C INT) --建立一个虚拟表 用来判断文件夹是否存在
INSERT @TEMP EXEC [MASTER]..XP_FILEEXIST @PATH
IF NOT EXISTS(SELECT * FROM @TEMP WHERE B=1)
BEGIN
--因为XP_CMDSHELL 函数的参数不允许使用变量拼接 所以使用EXEC(SQL)的方法
DECLARE @EX NVARCHAR(255)
SET @EX='EXEC XP_CMDSHELL ''MKDIR '+@PATH+''''
EXEC(@EX)
END

如果报错

消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行
SQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。

则使用以下修改配置项包裹以上脚本

--开启 XP_CMDSHELL
GO
SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1
RECONFIGURE
GO
SP_CONFIGURE 'XP_CMDSHELL',1
RECONFIGURE
GO //=================== 此处为使用了 XP_CMDSHELL 的脚本 //=================== --关闭 XP_CMDSHELL
GO
SP_CONFIGURE 'XP_CMDSHELL',0
RECONFIGURE
GO
SP_CONFIGURE 'SHOW ADVANCED OPTIONS',0
RECONFIGURE
GO

最后贴上数据库备份命令

--备份数据库
--此处可以放置多个数据库的备份 不必和定制作业步骤时选择的库是同一个
DECLARE @BAKFILE NVARCHAR(255)
SET @BAKFILE = @PATH+@DATE+'.DB1.BAK'
BACKUP DATABASE [DB1] TO DISK = @BAKFILE WITH COMPRESSION
SET @BAKFILE = @PATH+@DATE+'.DB2.BAK'
BACKUP DATABASE [DB2] TO DISK = @BAKFILE WITH COMPRESSION

综上所述, 最终版的SQL备份命令是: (展开查看)

---------------------------
--开启 XP_CMDSHELL
---------------------------
GO
SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1
RECONFIGURE
GO
SP_CONFIGURE 'XP_CMDSHELL',1
RECONFIGURE
GO ---------------------------
--检查文件夹是否存在 不存在则创建
---------------------------
DECLARE @PATH VARCHAR(255) --路径
DECLARE @DATE VARCHAR(255) --日期 例如: 20171011
SET @DATE=CAST(DATEPART(YYYY,GETDATE()) AS VARCHAR)+CAST(DATEPART(MM,GETDATE()) AS VARCHAR)+CAST(DATEPART(DD,GETDATE()) AS VARCHAR)
SET @PATH = 'E:\SQL2012_BAK\'+@DATE+'\'
DECLARE @TEMP TABLE(A INT,B INT,C INT) --建立一个虚拟表 用来判断文件夹是否存在
INSERT @TEMP EXEC [MASTER]..XP_FILEEXIST @PATH
IF NOT EXISTS(SELECT * FROM @TEMP WHERE B=1)
BEGIN
--因为XP_CMDSHELL 函数的参数不允许使用变量拼接 所以使用EXEC(SQL)的方法
DECLARE @EX NVARCHAR(255)
SET @EX='EXEC XP_CMDSHELL ''MKDIR '+@PATH+''''
EXEC(@EX)
END ---------------------------
--备份数据库
---------------------------
DECLARE @BAKFILE NVARCHAR(255)
SET @BAKFILE = @PATH+@DATE+'.DB1.BAK'
BACKUP DATABASE [DB1] TO DISK = @BAKFILE WITH COMPRESSION
SET @BAKFILE = @PATH+@DATE+'.DB2.BAK'
BACKUP DATABASE [DB2] TO DISK = @BAKFILE WITH COMPRESSION ---------------------------
--关闭 XP_CMDSHELL
---------------------------
GO
SP_CONFIGURE 'XP_CMDSHELL',0
RECONFIGURE
GO
SP_CONFIGURE 'SHOW ADVANCED OPTIONS',0
RECONFIGURE
GO

SQL端通过脚本判断文件夹是否存在 并创建的更多相关文章

  1. SQL SERVER2008判断文件夹是否存在并创建文件夹

    原文地址:https://www.cnblogs.com/iiwen/p/7650118.html DECLARE @PATH VARCHAR(255) --路径 DECLARE @DATE VARC ...

  2. PHP判断文件夹是否存在和创建文件夹的方法(递归创建多级目录)

    在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,mkdir就可以创建文件夹,其实不是那样,单个的MKDIR只能创建一级目录,对于多级的就不行了,那如何用mkdir来创建呢?先我抄一段 ...

  3. bat 批处理切换到当前脚本所在文件夹

    bat 批处理切换到当前脚本所在文件夹   切换到当前脚本所在的文件夹 ? 1 cd  %~dp0 另外附上一些bat基本内容 —————————————————————————————— 批处理常用 ...

  4. python os 命令,及判断文件夹是否存在

    使用前 import os导入模块   os模块: os.sep     可以取代操作系统特定的路径分割符 os.linesep  字符串给出当前平台使用的行终止符.例如,Windows使用'\r\n ...

  5. Java 判断文件夹、文件是否存在、否则创建文件夹

    1.判断文件是否存在,不存在创建文件 File file=new File("C:\\Users\\QPING\\Desktop\\JavaScript\\2.htm"); if( ...

  6. 判断文件是否存在,不存在创建文件&&判断文件夹是否存在,不存在创建文件夹

    1.判断文件是否存在,不存在创建文件 File file=new File("C:\\Users\\QPING\\Desktop\\JavaScript\\2.htm"); if( ...

  7. python 获取中文拼音首字母;判断文件夹是否存在

    1.如何获取中文字符串的首字母 import pinyin #输入name def get_pinyin_first_alpha(name): return "".join([i[ ...

  8. shell 判断文件夹或文件是否存在

    文件夹不存在则创建 if [ ! -d "/data/" ];then mkdir /data else echo "文件夹已经存在" fi 文件存在则删除 i ...

  9. C语言判断文件夹或者文件是否存在的方法【转】

     C语言判断文件夹或者文件是否存在的方法   方法一:access函数判断文件夹或者文件是否存在 函数原型: int access(const char *filename, int mode); 所 ...

随机推荐

  1. Word2013文章如何直接发布到CSDN博客

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  2. ConsoleAppender

    http://logback.qos.ch/manual/appenders.html#ConsoleAppender <configuration> <appender name= ...

  3. Ubuntu使用tzselect修改时区

    1.命令行运行 sudo tzselect 2.选择洲区(这里选择亚洲Asia) waichung@desktop:~$ sudo tzselect [sudo] password for waich ...

  4. unittest测试框架详谈及实操(三)

    断言 unittest的TestCase类提供了很多实用的方法来校验预期结果和程序返回的实际结果是否一致.当然这些方法要求必须满足某些条件才能继续执行接下的测试.大致有3种这样的方法.各覆盖一个特定类 ...

  5. c_c++基础问题(平时读书时笔记)

    1 IP私有地址: 10.0.0.0 -- 10.255.255.255 172.16.0.0 -- 172.31.255.255 192.168.0.0 -- 192.168.255.255 2OS ...

  6. Arcgis Android 常见问题

    关于arcgis android 安装包较大的问题 如果想缩小大小,可以只保留armeabi,只是这样就不支持x86类型cpu的手机了. 可以考虑做成单独的版本,供用户下载. 即打2个包,一个供普通a ...

  7. C# 调取摄像头 +拍照

    1.添加引用 using System.Windows.Media.Imaging; using AForge; using AForge.Controls; using AForge.Video; ...

  8. 如何防止Unity3D代码被反编译?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 网易云易盾移动游戏安全技术专家陈士留在2018年Unity技术路演演讲内容中对这个问题有过比较详细的介绍,摘录如下: 防止Unity3D代码被反编译 ...

  9. Pycharm中安装Pygame并写第一个程序

    第一步:打开Pycharm 第二步:点File ->Default Settings->Project Interpreter->点加号 第三步: 搜索Pygame->Inst ...

  10. checkbox attr 和 prop ,onclick 事件,

    给checkbox 添加默认的勾选,尽量使用 checked=“checked”,不要使用checked=“true”. <td><input id="checkboxid ...