SQL端通過腳本判斷文件夾是否存在 並創建


做數據庫備份作業的時候..想按日期建立文件夾.. 

首先要判斷文件夾是否存在

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM