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




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


    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,便可显示高级配置选项。

    可以通过语句

    Select is_advanced From sys.configurations Where name=N'xp_cmdshell'

    查看是否高级选项。

    )

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

    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,1Primary 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

    */

  • 相关阅读:
    poj1363Rails(栈模拟)
    centos6.5设备mysql5.6
    SGU326Perspective(网络流量的最大流量)(经典赛车模型)
    扩大或缩小undo表空间
    Boost源代码学习---shared_ptr.hpp
    leetcode
    为客户打造RAC-DG一些遇到的问题汇总
    十归并排序有用的算法和二进制搜索的基础
    Delphi TNativeXML Node节点乱码的一种解决方法
    Delphi TcxTreeList 读取 TcxImageComboBoxItem类型的值
  • 原文地址:https://www.cnblogs.com/wghao/p/1608248.html
Copyright © 2020-2023  润新知