필기노트

MSSQL 저장 프로시저를 통한 FTP 서버와 파일 전송 본문

Database

MSSQL 저장 프로시저를 통한 FTP 서버와 파일 전송

우퐁코기 2022. 12. 3. 06:19
반응형

1. 파일 보내기

-- =============================================
-- Author: whk
-- Create date: 2022.12.03
-- Description: MSSQL 저장 프로시저를 통한 FTP 서버로 파일 보내기
-- Test: EXEC up_FtpPutFile '111.111.111.111', '11', '1111', '1111', '1:\1111\1111.txt'
-- =============================================
CREATE PROCEDURE dbo.up_FtpPutFile
    @ftp_server      AS VARCHAR(255),
    @ftp_port        AS VARCHAR(255),
    @ftp_user        AS VARCHAR(255),
    @ftp_pwd         AS VARCHAR(255),
    @file_to_push    AS VARCHAR(255)
AS
BEGIN
    /************************************************************************
    * Procedure 환경설정
    ************************************************************************/
    SET NOCOUNT ON;
    SET LOCK_TIMEOUT 10000;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    SET XACT_ABORT ON;
	
    /************************************************************************
    * 사용자 변수 선언
    ************************************************************************/
    DECLARE @cmd             AS VARCHAR(1000)
    DECLARE @ftpType         AS VARCHAR(255) = 'ascii'
    DECLARE @ftp_cmd_text    AS VARCHAR(255) = '1:\1111\1111\1111.txt'

    -- deal with special characters for echo commands
    SET @ftp_server = REPLACE(REPLACE(REPLACE(@ftp_server, '|', '^|'), '<', '^<'), '>', '^>')
    SET @ftp_user = REPLACE(REPLACE(REPLACE(@ftp_user, '|', '^|'), '<', '^<'), '>', '^>')
    SET @ftp_pwd = REPLACE(REPLACE(REPLACE(@ftp_pwd, '|', '^|'), '<', '^<'), '>', '^>')
    SET @file_to_push = REPLACE(REPLACE(REPLACE(@file_to_push, '|', '^|'), '<', '^<'), '>', '^>')
	
    /************************************************************************
    * 업무처리
    ************************************************************************/
    SET @cmd = 'echo open ' + @ftp_server + ' ' + @ftp_port + '> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo ' + @ftp_user + '>> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo ' + @ftp_pwd + '>> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo ' + @ftpType + '>> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo put ' + @file_to_push + '>> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo quit >> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'ftp -s:' + @ftp_cmd_text
    PRINT @cmd
    EXEC master.dbo.xp_cmdshell @cmd
END

 

2. 파일 받기

-- =============================================
-- Author: whk
-- Create date: 2022.12.03
-- Description:	MSSQL 저장 프로시저를 통한 FTP 서버로 파일 받기
-- Test: EXEC up_FtpGetFile '111.111.111.111', '11', '1111', '1111', '', '1111.txt', '1:\1111\', '1111.txt'
-- =============================================
CREATE PROCEDURE dbo.up_FtpGetFile
    @ftp_server         AS VARCHAR(255),
    @ftp_port           AS VARCHAR(255),
    @ftp_user           AS VARCHAR(255),
    @ftp_pwd            AS VARCHAR(255),
    @ftp_file_path      AS VARCHAR(255),	-- 받아올 파일의 위치
    @ftp_file_name      AS VARCHAR(255),	-- 받아올 파일의 이름
    @local_file_path    AS VARCHAR(255),	-- 파일을 저장할 위치
    @local_file_name    AS VARCHAR(255) 	-- 파일을 저장할 이름
AS
BEGIN
    /************************************************************************
    * Procedure 환경설정
    ************************************************************************/
    SET NOCOUNT ON;
    SET LOCK_TIMEOUT 10000;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    SET XACT_ABORT ON;

    /************************************************************************
    * 사용자 변수 선언
    ************************************************************************/
    DECLARE @cmd             AS VARCHAR(1000)
    DECLARE @ftp_cmd_text    AS VARCHAR(255) = '1:\1111\1111\1111.txt'

    -- deal with special characters for echo commands
    SET @ftp_server = REPLACE(REPLACE(REPLACE(@ftp_server, '|', '^|'), '<', '^<'), '>', '^>')
    SET @ftp_user = REPLACE(REPLACE(REPLACE(@ftp_user, '|', '^|'), '<', '^<'), '>', '^>')
    SET @ftp_pwd = REPLACE(REPLACE(REPLACE(@ftp_pwd, '|', '^|'), '<', '^<'), '>', '^>')
    SET @ftp_file_path = REPLACE(REPLACE(REPLACE(@ftp_file_path, '|', '^|'), '<', '^<'), '>', '^>')
    SET @local_file_path = REPLACE(REPLACE(REPLACE(@local_file_path, '|', '^|'), '<', '^<'), '>', '^>')
	
    /************************************************************************
    * 업무처리
    ************************************************************************/
    SET @cmd = 'echo open ' + @ftp_server + ' ' + @ftp_port + '> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo ' + @ftp_user + '>> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo ' + @ftp_pwd + '>> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo get ' + @ftp_file_path + @ftp_file_name + ' ' + @local_file_path + @local_file_name + '>> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'echo quit >> ' + @ftp_cmd_text
    PRINT @cmd
    EXEC master..xp_cmdshell @cmd
	
    SET @cmd = 'ftp -s:' + @ftp_cmd_text
    PRINT @cmd
    EXEC master.dbo.xp_cmdshell @cmd
END

 

3. FTP 명령어

1) echo :  콘솔에 메시지를 출력해줍니다.

2) echo Hello World! > hello.txt : 텍스트 파일이 없다면 생성한후 'echo' 명령어를 사용해서 출력한 결과를 저장

3) echo Hello World! >> hello.txt : 텍스트 파일이 존재한다면 기존 저장된 파일의 밑에 라인에 저장한다.

4) open : 호스트 이름이나 IP주소를 사용하여 접속한다.
5) put : 자신의 시스템에 있는 파일을 ftp 서버로 전송한다.

6) get : ftp 서버로부터 파일을 전송받는다.

7) ascii : ASCII 형태로 파일을 주고 받는다.

8) quit : ftp 사용을 그만하고 셀 상태로 돌아간다.

9) -s:filename : FTP 명령이 들어 있는 텍스트 파일을 실행한다.

 

 


참고

 

CMD에서 텍스트 파일 생성하는 3가지 방법

이번에는 CMD에서 텍스트 파일을 생성하는 3가지 방법을 정리하였습니다. 1. echo와 redirection 연산자 echo 이 내용을 텍스트 파일에 씁니다 > test.txt 원래 echo는 콘솔에 메시지를 출력해줍니다. 여기

hianna.tistory.com

 

윈도우 cmd의 > 와 >>의 차이점

# >ex) echo Hello World! > hello.txt - hello.txt 라는 텍스트 파일이 없다면 생성한후 문자열 저장, 존재한다면 덮어 쓴다 # >>ex) echo Hello World! >> hello.txt - hello.txt 라는 텍스트 파일이 없다면 생성한후 문자

nickjoit.tistory.com

 

FTP - FTP 명령어 목록

FTP 활용 능력 향상을 위한 command list FTP 명령어 리스트 [리눅스] yum install -y vsftpd - 리눅...

blog.naver.com

반응형
Comments