新的系统存储过程 sys.xp_delete_files 与 sys.xp_delete_file 有何不同?

Sol*_*zky 12 sql-server extended-stored-procedure sql-server-2019 file-system

SQL Server 2019 引入了一个新的(且未记录的)系统存储过程:

sys.xp_delete_files

这个新的扩展存储过程究竟有什么作用?它与xp_delete_file已经存在多年的有什么不同?它代替xp_delete_file吗?

Sol*_*zky 12

首先,较旧的xp_delete_file(也未记录)非常有限:

  1. 它只能删除备份(.bak / .trn)或报告(??)文件(我相信它实际上会扫描它们的第一部分以验证文件“类型”
  2. 它仅按文件扩展名(即不是特定文件,或基于通配符的任何匹配项)基于早于提供的日期删除
  3. 它很挑剔,需要在目录/文件夹上加一个斜杠
  4. 只能删除文件,不能删除文件夹
  5. 可以通过子文件夹向下递归(好的,所以这不是限制)

有关它的更多信息,请参阅:


较新的sys.xp_delete_files具有以下语法:

EXEC sys.xp_delete_files 'fileSpec.01' [, 'fileSpec.02' [, ...] ] ;
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 文件类型/扩展名无关紧要
  2. 适用于标准 DOS 通配符:
    • * = 零个或多个任何字符
    • ? =正好是任何字符之一
  3. 难道不是通过子目录(删除文件)(这是唯一的“限制”)递归
  4. 可以指定多个完全限定的路径规范,每个都能够处理通配符
  5. 可以删除整个非空子文件夹结构!!(可能需要运行几次才能删除所有内容)
  6. 必须是sysadmin固定服务器角色的成员才能执行(使用模块签名而不是将应用程序登录添加到sysadmin固定服务器角色;请参阅:安全轻松地使用高级权限而不将其授予任何人:服务器级
  7. 向后移植到 SQL Server 2017(可能在 CU18 中)

有关完整的详细信息,请参阅我的帖子:

sys.xp_delete_files 和“允许文件系统枚举”:SQL Server 2019 中的两个新的未记录项目