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