您的位置:首页 > 数据库

通过SQL存储过程删除过期的数据库Bak备份文件或其它文件

2011-11-30 19:33 656 查看
1.先启用 xp_cmdshell 扩展存储过程:

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
Use Master

GO

Exec sp_configure 'show advanced options', 1

GO

Reconfigure;

GO

sp_configure 'xp_cmdshell', 1

GO

Reconfigure;

GO

(注:因为xp_cmdshell是高级选项,所以这里启动xp_cmdshell,需要先将 show advanced option 设置为 1,便可显示高级配置选项。

可以通过语句

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
Select is_advanced From sys.configurations Where name=N'xp_cmdshell'

查看是否高级选项。

)

2.删除文件的存储过程:

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
If object_id('sp_DeleteFiles') Is Not Null

Drop Proc sp_DeleteFiles

Go

Create Proc sp_DeleteFiles

(

@FilePath nvarchar(128),

@SearchPattern nvarchar(200),

@LastWriteTimeStart datetime,

@LastWriteTImeEnd datetime

)

As

Set Nocount On

Declare @Cmd nvarchar(2000),

@OutputInfo nvarchar(2000),

@Dir nvarchar(2000),

@Date datetime,

@FileName nvarchar(512)

Declare @Tmp Table(ID int Identity(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 For

Select OutputInfo From @tmp Where Patindex('%\%',OutputInfo)>0 Or IsDate(substring(OutputInfo,1,10))=1 /*过滤只留目录和文件列表*/

Open Cur_dir

Fetch Next From Cur_dir Into @OutputInfo

While @@Fetch_Status = 0

Begin

If Patindex('%\%',@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

Print N'已删除文件:'+@Dir+N'\'+@FileName

End

End

Fetch Next From Cur_dir Into @OutputInfo

End

Close Cur_dir

Deallocate Cur_dir

Go

3. [b]测试:[/b]

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

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐