專家解答
雖然有很多種方式可以解決這個問題但是我們可以用TSQL代碼來處理這個文件刪除過程我用xp_cmdshell命令和FORFILES命令來處理類似於你所列出的過程可以從Microsoft TechNet中獲得FORFILES的可靠信息但是在這篇文章中我將涉及FORFILES大量的結構和使用方法來達到你的目的
該FORFILES命令將選取文件的一個子集並且針對這個子集執行一個命令這個命令需要下面的參數和接受下面的變量
參數
參數名
描述
/p
路徑
/m
檢索屏蔽 (默認情況下是 **)
/s
如果包含這個參數那麼子目錄將會被遞歸地檢索
/c <command>
針對結果集中的每一個文件執行命令命令必須包含在雙引號中默認情況是cmd c/ echo @file
/d
針對文件選擇的日期范圍把最新的更改日期當作文件標准當/d參數是MM/DD/YYYY格式時滿足指定的+/日期標准的文件也包含在內當文件格式是smallint ( )文件+/文件並且帶著一個更改日期+/時從當前日期到該日期的時間數目將會包含在這個文件結果集中
變量
變量名
描述
@FILE
文件名
@FNAME
無擴展的文件名
@EXT
文件擴展名
@PATH
文件絕對路經
@RELPATH
文件的相對路徑
@ISDIR
如果文件類型是一個目錄那麼判斷是否是TRUE
@FSIZE
文件大小(用字節衡量)
@FDATE
文件上的最新更改日期郵戳
@FTIME
文件上的最新更改時間郵戳
利用這些參數可以構造下面的例子來解決你刪除備份腳本文件的難題你可以基於更改時間/日期或者備份類型來創建腳本你甚至可以構造能夠同時參照兩種標准的腳本
我們將仔細看看這些可能的腳本記住你將從TSQL代碼內部執行這個過程所以你需要在一個xp_cmdshell訪問中以EXEC xp_cmdshell FORFILES COMMAND的格式總結這些語句請注意在所有的例子中我都會使用/Q 和 /F標簽來作為刪除命令這意味著這個命令將使用安靜模式(/Q)甚至刪除只能讀的文件(/F)
例子
當文件更改日期晚於//時刪除所有C:\Backup目錄和它子目錄下的sql文件
EXEC xp_cmdshell FORFILES /p c:\BACKUP /s /m *sql /d // /c CMD /C del /Q /F @FILE
當文件更改日期多於天時刪除所有C:\Backup目錄和它的子目錄下的sql文件
EXEC xp_cmdshell FORFILES /p c:\BACKUP /s /m *sql /d /c CMD /C del /Q /F @FILE
當文件更改日期多於天且文件名以F_打頭時刪除所有C:\Backup目錄和它的子目錄下的sql文件
EXEC xp_cmdshell FORFILES /p c:\BACKUP /s /m F_*sql /d /c CMD /C del /Q /F @FILE
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22432.html