我正在尝试编写一些 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”。
这将返回“成功”,但文件不会被删除。
我正在使用 SQL Server 2005,标准版,带 SP2。
原文由 Chris Burgess 发布,翻译遵循 CC BY-SA 4.0 许可协议
有类似的问题,找到了各种答案。这是我发现的。
您不能使用 xp_delete_file 删除 7z 文件。这是一个未记录的扩展存储过程,它是 SQL 2000 的保留版本。它检查要删除的文件的第一行,以验证它是 SQL 备份文件还是 SQL 报告文件。它不根据文件扩展名进行检查。据我所知,它的预期用途是在维护计划中清理旧备份和计划报告。
这是一个基于 Tomalak 链接的示例,用于删除超过 7 天的备份文件。让人们绊倒的是“sys”模式、文件夹路径中的尾部斜杠以及文件扩展名中没有要查找的点。运行 SQL Server 的用户还需要对该文件夹具有删除权限。
请注意,xp_delete_file 在 SP2 中已损坏,并且不适用于报告文件;在 [ http://support.microsoft.com/kb/938085] 上有一个修补程序。我还没有用 SP3 测试过它。
由于没有记录,xp_delete_file 可能会在 SQL Server 的未来版本中消失或更改。许多站点建议使用 shell 脚本来代替执行删除操作。