【问题标题】:Recursive delete removes file records from SQL table, but I need to remove the files from a directory aswell递归删除从 SQL 表中删除文件记录,但我还需要从目录中删除文件
【发布时间】:2014-05-21 11:46:29
【问题描述】:

我有一个递归删除存储过程,当我删除一个文件或文件夹时,它会从我的记录中删除所有文件和文件夹。但是,我还有一个存储实际文件的文件目录。这些文件名存储在要删除的记录中。我将如何管理从即将删除的记录中检索文件名并从目录中删除该文件?

这是我的程序:

WHILE (SELECT COUNT(FileID) FROM Files WHERE ParentFolderID is not null AND ParentFolderID not in (SELECT FileID FROM Files) AND ParentfolderID !=0 ) > 0
BEGIN
DELETE FROM Files Where ParentFolderID is not null AND ParentFolderID !=0 AND ParentFolderID not in (SELECT FileID FROM Files);
END

Files 中用于从目录中检索文件的标识符 是“文件名”。长话短说,从文件中删除“X”时,得到 “X”的文件名并从文件目录中删除。

【问题讨论】:

  • 这只是一个长镜头,但如果你有一个 microsoft sql 服务器,你可以尝试创建一个 CLR 用户定义函数。此函数将文件名的路径作为参数并将其删除。然后在 DELETE FROM 之前调用此函数。

标签: asp.net sql webforms


【解决方案1】:

SQL CLR 函数是要走的路。本文展示了如何使用 CLR 函数删除文件的示例:http://www.mssqltips.com/sqlservertip/2302/extending-file-system-operations-in-sql-server-using-clr/

【讨论】:

  • 非常感谢!我会试一试。
  • CLR 似乎还有很长的路要走...如果我要使用 xp_cmdshell 我将如何在上面的代码中插入它?
  • 如果我错了,请纠正我,但上面的 WHILE 循环只会运行一次。如果要添加 xp_cmdshell,则需要一次性删除所有文件。如果您连接文件名,Windows 的 DEL 命令允许这样做。使用此帮助 (stackoverflow.com/questions/887628/…) 连接所有文件名并将其附加到 xp_cmdshell /Q 'del '。执行静默删除的 /Q 参数。
猜你喜欢
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多