通过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
*/
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
*/
相关文章推荐
- 通过SQL存储过程删除过期的数据库Bak备份文件或其它文件
- 通过SQL存储过程删除过期的数据库Bak备份文件
- 通过SQL存储过程删除过期的数据库Bak备份文件
- 通过CLR存储过程删除过期的数据库Bak备份文件
- 通过SQL存储过程删除过期的数据库Bak备份文件
- 数据库备份和删除旧文件 存储过程
- SQL Server ->> 调用系统内建扩展存储过程"master.dbo.xp_delete_file"删除过期备份文件
- SQL Server中通过扩展存储过程实现数据库的远程备份与恢复
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 【源码】sql__备份数据库1__bak数据库__存储过程
- [PL/SQL]导入文件内的数据到数据库(针对本博的导出存储过程)
- 删除与恢复扩展存储过程 SQL 2000数据库
- 删除数据库中所有存储过程和函数的sql语句
- sql server2008R2自动备份和自动删除过期bak文件
- 备份数据库的存储过程.sql
- 删除数据库所有存储过程的SQL语句
- 删除与恢复扩展存储过程 SQL 2000数据库
- 通过制定SQL计划和系统计划实现]SQL Server 2005数据库定期备份和删除历史备份记录
- 删除数据库所有存储过程的SQL语句
- [通过制定SQL计划和系统计划实现]SQL Server 2005数据库定期备份和删除历史备份记录