我正在尝试编写一些SQL,该SQL将删除早于7天的’.7z’类型的文件。
这是我无法正常工作的结果:
DECLARE @DateString CHAR(8) SET @DateString = CONVERT(CHAR(8), DATEADD(d, -7, GETDATE()), 1) EXECUTE master.dbo.xp_delete_file 0, N'e:\Database Backups',N'7z', @DateString, 1
我还尝试将“ 1”的结尾更改为“ 0”。
这将返回“成功”,但文件不会被删除。
我正在使用带有SP2的SQL Server 2005 Standard
遇到类似的问题,找到了各种答案。这是我发现的。
您无法使用xp_delete_file删除7z文件。这是未记录的扩展存储过程,是SQL 2000的保留过程。它检查要删除的文件的第一行,以验证它是SQL备份文件还是SQL报告文件。它不会根据文件扩展名进行检查。据我了解,它的预期用途是在维护计划中清理旧备份和计划报告。
这是一个基于Tomalak链接的示例,该链接删除了7天以上的备份文件。让人们大跌眼镜的是’sys’模式,文件夹路径中的尾部斜杠以及文件扩展名中没有要查找的点。运行SQL Server的用户还需要对该文件夹具有删除权限。
DECLARE @DeleteDate datetime SET @DeleteDate = DateAdd(day, -7, GetDate()) EXECUTE master.sys.xp_delete_file 0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport) N'D:\SQLbackups\', -- folder path (trailing slash) N'bak', -- file extension which needs to be deleted (no dot) @DeleteDate, -- date prior which to delete 1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)
请注意,xp_delete_file在SP2中已损坏,无法在报表文件上使用。在 [http://support.microsoft.com/kb/938085]上有针对它的修复程序。我尚未使用SP3对其进行测试。
由于未记录,因此xp_delete_file可能会消失或在SQL Server的未来版本中更改。许多站点建议使用Shell脚本来执行删除操作。