Существует ли файл в текущей папке, использующей SQL Server? - PullRequest
1 голос
/ 19 марта 2019
CREATE PROCEDURE SearchFile_InAllDirectories 
     @SearchFile VARCHAR(100)

DECLARE @BasePath VARCHAR(1000),
        @Path VARCHAR(1000),
        @FullPath VARCHAR(2000),
        @Id INT;

SET @SearchFile = 'test2019.txt'

CREATE TABLE tmp_BasePath 
(
    basePath VARCHAR(100)
);

INSERT INTO tmp_BasePath (basePath) 
VALUES ('\\Path1'), ('\\Path1\Images_5'),
        ('\\Path3\Images_4'), ('\\basketballfolder\2017_Images'),
        ('\\basketballfolder\2017_Images')

CREATE TABLE tmp_DirectoryTree 
(
     id INT IDENTITY(1,1),
     subdirectory VARCHAR(512),
     depth INT,
     isfile BIT,
     fullpath VARCHAR(500)
);

DECLARE basePath_results CURSOR FOR
    SELECT bp.basePath

OPEN basePath_results

FETCH NEXT FROM basePath_results into @BasePath

WHILE @@FETCH_STATUS = 0
BEGIN
    INSERT INTO tmp_DirectoryTree (subdirectory, depth, isfile)
        EXEC master.sys.xp_dirtree @BasePath, 0, 1;

    FETCH NEXT FROM basePath_results INTO @Basepath
END

CLOSE basePath_results;
DEALLOCATE basePath_results;

END

Я создаю хранимую процедуру, которая проверяет, находится ли файл, переданный в качестве параметра, в одной из жестко закодированных папок.

Например, если я передамфайл с именем «test2019.txt», хранимая процедура должна проверить, существует ли этот файл в папке.Если да, верните true и укажите путь к файлу.

По сути, я просто хочу проверить, существует ли файл в текущем каталоге, если да, верните мне полный путь.

Сейчас я могу использовать курсор для динамического получения путей к папкам.,Теперь просто нужен способ проверить, существует ли файл в пути к папке, и вернуть полный путь.

Пожалуйста, смотрите код.Я надеюсь это имеет смысл.Спасибо за помощь.

Я использую SQL Server 2017.

1 Ответ

1 голос
/ 19 марта 2019

У меня есть другое решение для вас, оно использует команду xp_cmdshell для извлечения и сохранения всех файлов с их полными путями в заданной папке

Пожалуйста, замените "répertoire de" на английский перевод "folder of",Я использую французскую версию Windows

**

--Kamel Gazzah
    --19/03/2019
    --Script to retrieve all the files in a a folder, inside all the sub 
     directoris

declare @folder as varchar(100)
-----------------------------------------
set @folder='d:\'
-----------------------------------------
declare @script as varchar(2000)
set @script='exec master..xp_cmdshell "dir '+@folder+'  /N /s"'
declare @mytab as table(id int identity(1,1),date_time datetime,folder int,filename varchar(1000),parent_folder varchar(200))
insert into @mytab(filename) exec(@script)
update @mytab set date_time= substring(filename,1,18) where date_time is null and isdate(substring(filename,1,18))=1
update @mytab set folder=1 where filename like '%répertoire de%' and folder is null
update @mytab set folder=0 where filename not like '%<DIR>%' and folder is null and date_time is not null
update @mytab set filename=replace(filename,'répertoire de ','') where folder=1
delete from @mytab where folder is null
update @mytab set parent_folder=t2.filename
--select t1.id,t1.folder,t1.filename,t2.filename
 from @mytab t1
outer apply (select top 1 filename from @mytab where id<t1.id  and folder=1 order by id desc) t2
where t1.folder=0
UPDATE @mytab SET FILENAME=substring(filename,37,len(filename)) WHERE FOLDER=0 
select id,replace(replace(parent_folder,'\',''),':',':\')+'\'+filename [Fullpath] from @mytab where folder=0 

**

...