admin

SQL Server xp_delete_file不删除文件

sql

我正在尝试编写一些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


阅读 252

收藏
2021-05-10

共1个答案

admin

遇到类似的问题,找到了各种答案。这是我发现的。

您无法使用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脚本来执行删除操作。

2021-05-10