Member 10379103 Ответов: 1

SQL курсор не обрабатывает все файлы


Приведенный ниже курсор работает для первых двух файлов в папке.

Мне нужно, чтобы он работал для любого количества файлов в папке, а не только для первых двух файлов.

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

Где же моя ошибка?

declare @cmdstring varchar(1000)
declare @PATH VARCHAR(256)
declare @Command varchar(1024) =  @Path + ' /A-D  /B'
declare @createdate datetime
declare @filename VARCHAR(500)
INSERT INTO #mytemptable
EXEC MASTER..xp_cmdshell @Command

   DECLARE Folder_FileList CURSOR 
    FOR  SELECT	
			Filename
			from #mytemptable
			 
    OPEN Folder_FileList;


    FETCH NEXT FROM Folder_FileList INTO @Filename

        BEGIN			
		SET NOCOUNT ON;	
		
	set @createdate = GETDATE()

set @cmdstring = 'copy "\\servername\c$\MainFolder\Subfolder\' + @filename  + '"  "C:\FinalFolder\FinalSubFolder\' + @filename + ' "'
exec master..xp_cmdshell @cmdstring,no_output


set @cmdstring = 'C:\FinalFolder\FinalSubFolder\' + @filename + '"'+ ' ' + '" "\\servername\c$\MainFolder\Subfolder\SSubFolder\'+ @filename +'_'+ CONVERT(varchar(10),getdate(),112) + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108),':','') + '.xls"'
exec master..xp_cmdshell @cmdstring,no_output
 
 
set @cmdstring = 'DEL "C:\FinalFolder\FinalSubFolder\' + @filename 
exec master..xp_cmdshell @cmdstring,no_output

set @cmdstring = 'DEL "\\servername\c$\MainFolder\Subfolder\' + @filename 
exec master..xp_cmdshell @cmdstring
 
     FETCH NEXT FROM Folder_FileList INTO @Filename
         
     
set @cmdstring = 'copy "\\servername\c$\MainFolder\Subfolder\' + @filename  + '"  "\\servername\c$\MainFolder\Subfolder\SSubFolder\' + @filename + ' "'
exec master..xp_cmdshell @cmdstring,no_output

set @cmdstring = 'DEL "\\servername\c$\MainFolder\Subfolder\' + @filename 
exec master..xp_cmdshell @cmdstring,no_output


 END
 

CLOSE Folder_FileList
DEALLOCATE Folder_FileList


Что я уже пробовал:

MSDN, google search, stackoverflow, различные блоги

1 Ответов

Рейтинг:
2

Member 10379103

Наконец - то я нашел решение- звоните, если вы видите проблемы с решением:

Вставляется в конце после FETCH NEXT FROM Folder_filelist в @filename

 EXEC xp_cmdshell 'COPY \\servername\c$\MainFolder\Subfolder\*EverythingIWant*.xls  "\\servername\c$\MainFolder\Subfolder\SSubFolder\*EverythingIWant*.xls'
    
--Delete from folder after copied
EXEC master..xp_cmdshell 'DEL /Q \\servername\c$\MainFolder\Subfolder\*EverythingIWant*.xls'


<!--<pre lang="SQL"-->
pre>