CREATE PROC usp_Copy_Unzip_DirFiles
@FTPPath NVARCHAR(4000)= '', -- ftp 資料夾路徑
@WorkPath NVARCHAR(4000) = '', -- work 資料夾路徑
@FileName NVARCHAR(4000) = '', -- 檔名
@sqlCmd NVARCHAR(4000) = '', -- 要執行的 cmd 命令
@RegRule nvarchar(4000) = 'Regex*.zip', -- 定義要拷貝的檔名的規則
@7zipPath NVARCHAR(4000) = 'IPCC$\"Program Files"\7-Zip\7z.exe', -- 原理即呼叫 7z 解壓軟體解壓,所以 IPC 對應到相應的網路磁碟路徑
@IsZipped BIT = 1 -- 輸入引數,確認拷貝的 是不是 壓縮檔案,只有壓縮檔案,下面的指令碼解壓部分才需要執行
AS
SET @sqlCmd = 'dir /b '+@FTPPath+@RegRule
IF OBJECT_ID('tempdb..#dirlisttab') IS NOT NULL
DROP TABLE tempdb..#dirlisttab
CREATE TABLE tempdb..#dirlisttab
(
FILENAME Nvarchar(128)
) INSERT INTO #dirlisttab
EXEC xp_cmdshell @sqlCmd
--SELECT * FROM #dirlisttab DECLARE file_cur CURSOR LOCAL STATIC FORWARD_ONLY FOR
SELECT [FILENAME] FROM #dirlisttab
OPEN file_cur
WHILE 1=1
BEGIN
fetch next from file_cur into @FileName
SET @sqlCmd = 'copy '+@FTPPath+@FileName+' '+@WorkPath+@FileName
print @sqlcmd
EXEC xp_cmdshell @sqlcmd IF(@IsZipped = 1)
BEGIN
SET @sqlCmd = @7zipPath+' x '+@WorkPath+@FileName+' -y -aos -o'+@WorkPath
print @sqlcmd
EXEC xp_cmdshell @sqlcmd
END if @@fetch_status <> 0 break;
END
CLOSE file_cur
DEALLOCATE file_cur
SET @sqlCmd = ' dir /b '+@WorkPath+'*.txt > '+@WorkPath+'FileName|del '+@WorkPath+'*.zip /Q'
print @sqlcmd
EXEC xp_cmdshell @sqlcmd
DROP TABLE tempdb..#dirlisttab
GO