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

Sql server 如何从数据库中已存在文件的位置删除文件?,sql-server,database,file,delete-file,Sql Server,Database,File,Delete File,如何删除已作为文件名存在于数据库表中的文件。 驱动器C:\Data上的示例有100个Word文档,其中70个文档将在数据库DMS.Filename中找到。 如果directory.filename=table.filename,则应删除该文件。在这种情况下,我们必须删除70字的文档。该过程应作为日常任务运行,并根据数据库检查新文件。 如何检查和删除文件 这里是新代码: 不能删除文件名中有空格或空白的cmd文件。我想这就是我得到的味精 找不到C:\Data\Integration 找不到C:\Wi

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

这里是新代码: 不能删除文件名中有空格或空白的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

尚未测试此代码,但它应该给您一个开始:
xp\u cmdshell
允许您从SQL Server执行shell命令:

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

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

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
DECLARE@FileName varchar(200)
声明@Command varchar(300)
声明文件名\u光标
从MyTable中选择[FileName]
用光标打开文件名
从FileName_游标获取下一个文件到@FileName
当@@FETCH\u状态为0时
开始
SET@Command='del'+@FileName+''
EXEC xp_cmdshell@命令
从FileName_游标获取下一个文件到@FileName
结束
用光标关闭文件名
取消分配文件名\u游标

请注意,这种方法存在安全风险。它不处理转义字符或
文件名中的双引号。你会面临这样的问题。最好使用SSIS读取表和删除文件,或者通过应用程序代码执行此操作。

**有人能告诉我此代码有什么问题吗?我尝试使用+'''cmd删除,但SQL不接受它。**
SET@cmd='EXEC xp\u cmdshell''del'''+@file\u path+'““+””
>输出消息102,级别15,状态1,第1行“C:\Data\Integration Lettre 2 purchase100000_100002013071012102601100000.doc”附近的语法不正确。要使用via cmd删除,您需要使用高逗号“'del”C:\Data\Integration Lettre 2 purchase100000_100002013071012102601100000.doc”的语法
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