1.先啟用 xp_cmdshell 擴充套件儲存過程:
usemaster
goexec
sp_configure
'show advanced options',
1goreconfigure;go
sp_configure
'xp_cmdshell',
1goreconfigure;go
(注:因為xp_cmdshell是高階選項,所以這裡啟動xp_cmdshell,需要先
將 show advanced option 設定為 1,便可顯示高階配置選項。
可以通過語句
select
is_advanced
from
sys.configurations
where
name=n
'xp_cmdshell'
檢視是否高階選項。
2.刪除檔案的儲存過程:if
object_id('
sp_deletefiles')
isnot
null
drop
proc
sp_deletefiles
gocreate
proc
sp_deletefiles
(@filepath
nvarchar
(128
),@searchpattern
nvarchar
(200
),@lastwritetimestart
datetime
,@lastwritetimeend
datetime)as
setnocount
ondeclare
@cmd
nvarchar
(2000
),@outputinfo
nvarchar
(2000
),@dir
nvarchar
(2000
),@date
datetime
,@filename
nvarchar
(512
)declare
@tmp
table
(id
intidentity(1
,1) primary
key, outputinfo
nvarchar
(2000
))set
@cmd=n
'dir/a:-d/s/t:w/4 '+
@filepath+n
'/'+
rtrim
(@searchpattern
) /*
dos顯示檔案**
*/insert
into
@tmp
exec
xp_cmdshell
@cmd
declare
cur_dir
cursor
forselect
outputinfo
from
@tmp
where
patindex('
%/%'
,outputinfo)
>0or
isdate
(substring
(outputinfo,1,
10))=1
/*過濾只留目錄和檔案列表
*/open
cur_dir
fetch
next
from
cur_dir
into
@outputinfo
while
@@fetch_status=0
begin
ifpatindex('
%/%'
,@outputinfo
)>0/*
提取目錄
*/set
@dir
=substring
(@outputinfo,1
,len
(@outputinfo)-
charindex
(char(32
),reverse
(@outputinfo
)))else
begin
set@date
=substring
(@outputinfo,1
,10)if
@date
between
@lastwritetimestart
and@lastwritetimeend
begin
/*不同的環境,如在繁體系統,這裡取檔名的處理方法可能不同
*/set
@outputinfo
=stuff
(@outputinfo,1
,17,''
) /*
過濾掉日期部分
*/set
@outputinfo
=stuff
(@outputinfo,1
,patindex('
%[0-9]%',
@outputinfo)-
1,'')
/*過濾掉字首的空格部分
*/set
@filename
=stuff
(@outputinfo,1
,charindex
(char(32
),@outputinfo
),''
) /*
取得檔名
*/set
@cmd=n
'del '+
@dir+n
'/'+
@filename
exec
xp_cmdshell
@cmd
,no_output
printn'
已刪除檔案:'+
@dir+n
'/'+
@filename
endend
fetch
next
from
cur_dir
into
@outputinfo
endclose
cur_dir
deallocate
cur_dirgo
3. 測試:
exec
sp_deletefiles
'f:/test',
'*.exe',
'20011001',
'20091119'/*
已刪除檔案: f:/test/gao/高2009-8-14/b2000hr_fuxing_chn_060406/hr_fuxing_071101.exe
已刪除檔案: f:/test/gao/高2009-8-14/b2000hr_fuxing_chn_060406/hr_fuxing_080127.exe
已刪除檔案: f:/test/gao/高2009-8-14/b2000hr_fuxing_chn_060406/hr_fuxing_080326.exe
已刪除檔案: f:/test/gao/高2009-8-14/b2000hr_fuxing_chn_060406/hr_fuxing_080328.exe
已刪除檔案: f:/test/gao/高2009-8-14/b2000hr_fuxing_chn_060406/hr_fuxing_080504.exe
已刪除檔案: f:/test/gao/高2009-8-14/b2000hr_fuxing_chn_060406/hr_fuxing_080628.exe
*/
通過SQL儲存過程刪除過期的資料庫Bak備份檔案
1.先啟用 xp cmdshell 擴充套件儲存過程 usemaster goexec sp configure show advanced options 1goreconfigure go sp configure xp cmdshell 1goreconfigure go 注 因為xp cmd...
SQL刪除過期檔案
在sql server中,一般是用維護計畫實現刪除過期檔案。不過直接用指令碼也是可以的,而且更靈活。下面介紹三種方法。優點 相容性好 缺點 不能刪除sql server之外建立的檔案,包括rar 備註 維護計畫中的 清理維護 也是呼叫此 擴充套件儲存過程 來刪除檔案。declare olddate ...
通過CLR儲存過程刪除過期的資料庫Bak備份檔案
在乙個備份檔案目錄databasebak下,有各個資料庫的完全 差異 事務備份檔案,結構式 databasebak 例項名 資料庫名 備份日期 包含完全 差異 事務備份檔案 現在想實現刪除某一日期之前過期不用的備份檔案。usetest go 設定clr選項,指定ms sql server可以執行使用...