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,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/wghao/archive/2009/11/22/1608248.html

通过SQL存储过程删除过期的数据库Bak备份文件相关推荐

  1. 还原Sql Server数据库BAK备份文件的三种方式及常见错误

    第一种方法,使用Sql Server Management Studio还原 这是演示的是Sql Server 2008R2版本,不同版本可能有细微差别 右键点击数据库→还原数据库 在还原的源中选择源 ...

  2. 如何删除过期的数据库备份文件呢? .

    通过 Forfiles 删除指定目录下过期的备份文件 /*-- 用法详解 D:/>forfiles /? FORFILES [/P pathname] [/M searchmask] [/S] ...

  3. linux定时备份mysql_linux定时备份MySQL数据库并删除七天前的备份文件

    #!/bin/bash # Name:bakmysql.sh # This is a ShellScript For Auto DB Backup and Delete old Backup #备份地 ...

  4. 在Spring框架中使用SQL存储过程

    Spring框架也支持对SQL存储过程的调用,SQL存储过程是一组预先定义好的SQL语句,并存储到数据库管理系统中,外部程序可以直接调用执行.本课主要讨论在Spring框架中应用程序如何调用MySQL ...

  5. 关于SQL Server自动备份无法删除过期的备份文件奇怪现象

    关于SQL Server自动备份无法删除过期的备份文件奇怪现象 关于SQL Server自动备份无法删除过期的备份文件 数据库服务器每天凌晨两点进行数据库备份,同时对5天前的数据库备份文件进行删除,不 ...

  6. 学习sql注入:猜测数据库_学习SQL:删除和更新数据SQL最佳实践

    学习sql注入:猜测数据库 Deleting and updating data is very common, but if performed without taking care, which ...

  7. bak文件转换成sql文件_数据库bak文件转sql

    Asp.Net 备份和恢复SQL SERVER 数据库 我们通常备份数据库时,需要登录数据库服务器去备份和恢复,这样很不方便,其实SQL SERVER自带的命令可能让我们很简单地实现远程通过Asp.N ...

  8. sql mysql 删除数据库_在sql中将已建数据库删除的详细步骤

    上期为大家讲解的建立数据库的方法,这期小编为大家讲解在sql中将已建数据库删除的详细步骤,一起去下文看看吧. 今天主要针对的是在SQL Server中已将建立好数据库之后呢!我们这边对建立完毕的数据库 ...

  9. Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份、差异备份、日志备份)、还原、删除、修改数据库等案例)之详细攻略

    Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份.差异备份.日志备份).还原.删除.修改数据库等案例)之详细攻略 目录 数据库管理 ...

最新文章

  1. 武汉锅检所检测机器人_嵊州市管道cctv机器人-检测服务,武汉天仪ty333,诚信承诺...
  2. idea中build项目之后生成的target看不见
  3. [python]使用virtualenv处理python版本问题
  4. 深度学习《CNN架构续篇 - 正则化》
  5. Mybatis动态sql语句的生成
  6. php-fpm启动条件,php-fpm的启动、重启
  7. STM32F4 LTDC学习
  8. 8.1 异常(Exceptions)
  9. Android Metro风格的Launcher开发系列第一篇
  10. vofuria的开发(3)将vuforia引入新建立的工程
  11. 这么狠,私塾在线架构师系列课程全都免费发放
  12. Windows Server2012搭建Git服务器
  13. 有这么一种东西,员工深恶痛绝,老板们却喜爱有加
  14. excel合并多个工作表_EXCEL动态合并工作表,操作其实很简单
  15. Smartphone--Android真机管理平台
  16. 如何用妙记多 Mojidoc 设置子弹笔记
  17. SQL Compliance Manager Crack
  18. termux目录_Termux 入门与实践
  19. (SIP-1-话机注册)关于IP话机通过SIP协议注册到PBX电话交换机的全过程解析-如何看wireshark中的报文
  20. 一个小白轻松月入上万块的线上冷门项目

热门文章

  1. html表单验证元素必填,AngularJS表单验证:向用户指示必填字段
  2. leetcode算法题--Restore IP Addresses
  3. 计算机传票录入教案,传票翻打教案.docx
  4. 翻译:MariaDB DATABASE()
  5. scala------------:: , +:, :+, :::, +++的区别
  6. 常用事件方法及技巧(二) -- MouseEvent(鼠标事件)
  7. 多个Finder方法的外部内容类型
  8. 【原拼】从/etc/inetd.conf学习服务(1)
  9. [转载]图像颜色转换-numpy/matplotlib/opencv区别
  10. C/C++ 32位/64位 sizeof(数据类型)