如何从文件已存在于数据库中的位置删除文件?

时间:2014-11-27 17:17:00

标签: sql-server database file delete-file

如何删除数据库表中已存在的文件作为文件名。 示例在驱动器C:\ Data上有100个Word文档,其中70个文档将在数据库DMS.Filename中找到。 如果directory.filename = table.filename则应删除该文件。在这种情况下,我们必须删除70个Word文档。该过程应作为每日任务运行,检查数据库中的新文件。 如何查看和删除文件?

此处新代码: 您无法在cmd文件中删除空格或文件名中的空格。我认为这是我得到的消息。

无法找到C:\ Data \ Integration

无法找到C:\ Windows \ system32 \ Lettre

DECLARE @image_files TABLE (file_path VARCHAR(MAX))
DECLARE @file_path VARCHAR(MAX), @cmd VARCHAR(MAX)

INSERT INTO @image_files (file_path)
EXEC xp_cmdshell 'C:\Data\*.doc /b /s /x'


DECLARE file_cursor CURSOR FOR
    SELECT file_path FROM @image_files
    WHERE file_path IN 
    (
           select 'C:\Data\' + QC_DESCRIPTION +'.doc' from tbl_France where QC_DESCRIPTION is not null      
    )

OPEN file_cursor

FETCH NEXT FROM file_cursor INTO @file_path

WHILE (@@FETCH_STATUS = 0)
BEGIN
    SET @cmd = 'EXEC xp_cmdshell ''del ' + @file_path + ''''
    EXEC(@cmd)

    FETCH NEXT FROM file_cursor INTO @file_path
END

CLOSE file_cursor    
DEALLOCATE file_cursor

1 个答案:

答案 0 :(得分:0)

尚未测试此代码,但它应该为您提供一个开始:xp_cmdshell允许您从SQL Server执行shell命令:

首先需要启用它(信用pero):

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

然后使用光标浏览表并删除文件:

DECLARE @FileName varchar(200)
DECLARE @Command  varchar(300)

DECLARE FileName_Cursor CURSOR FOR
    SELECT [FileName] FROM MyTable

OPEN FileName_Cursor

FETCH NEXT FROM FileName_Cursor INTO @FileName

WHILE @@FETCH_STATUS <> 0
BEGIN
    SET @Command = 'del "' + @FileName + '"'
    EXEC xp_cmdshell @Command
    FETCH NEXT FROM FileName_Cursor INTO @FileName
END

CLOSE FileName_Cursor
DEALLOCATE FileName_Cursor

请注意,此方法存在安全风险。它不处理FileName中的转义字符或双引号。你会遇到像shellshock这样的问题。最好使用SSIS来读取表并删除文件,或者通过应用程序代码来完成。