如何删除数据库表中已存在的文件作为文件名。 示例在驱动器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
答案 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来读取表并删除文件,或者通过应用程序代码来完成。