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

mac2022-06-30  37

1.先启用 xp_cmdshell 扩展存储过程:

Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/Use MasterGOExec sp_configure 'show advanced options'1GOReconfigure;GO sp_configure 'xp_cmdshell'1GOReconfigure;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. 测试:

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 */

转载于:https://www.cnblogs.com/deepwishly/archive/2011/11/30/2551127.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)