码迷,mamicode.com
首页 > 数据库 > 详细

SQL端通过脚本判断文件夹是否存在 并创建

时间:2017-10-11 15:23:41      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:服务器   sele   get   函数   sql2012   建立   alt   数据库备份   col   

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

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

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,第 1SQL 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
View Code

 

SQL端通过脚本判断文件夹是否存在 并创建

标签:服务器   sele   get   函数   sql2012   建立   alt   数据库备份   col   

原文地址:http://www.cnblogs.com/iiwen/p/7650118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!