MSSQL

[MSSQL] CMD명령어를 통해 파일존재여부 값을 받아서 처리하는 방법

띠옹떼옹 2024. 6. 21. 19:56

CMD명령어를 통해 파일존재여부 값을 받아서 처리해야할 경우(DIR 명령어X)

ex. 백업파일이 존재하는지 체크하기 등등..

 

0. D:\test.txt 파일이 있는 상태


1. CONFIGURE 설정

-- 고급 옵션이 꺼져있으면 켜주고
EXEC SP_CONFIGURE 'show advanced options', 1;
-- 설정값 동기화
RECONFIGURE;

-- 설정값을 켜주고
EXEC SP_CONFIGURE 'XP_CMDSHELL', 1;
-- 설정값 동기화
RECONFIGURE;

 

2. 쿼리 작성 및 실행

DECLARE @CHECK_CMD_1	VARCHAR(4000)	= ''	-- 1번 CMD 명령어 설정
,		@CHECK_CMD_2	VARCHAR(4000)	= ''	-- 2번 CMD 명령어 설정
,		@RC				INT				= 0		-- 리턴값 설정

SET @CHECK_CMD_1 = 'IF NOT EXIST ""D:\test1.txt"" echo 1'	-- 파일이 없으면 ECHO 1 처리
SET @CHECK_CMD_2 = 'IF NOT EXIST ""D:\test1.txt"" 1'		-- 파일이 없으면 없는 명령어를 실행하여 강제로 에러 발생 시키기 위해 1로 설정하여 처리

EXEC @RC = XP_CMDSHELL @CHECK_CMD_1	-- OUTPUT = 1
SELECT @RC	-- 0 반환
EXEC @RC = XP_CMDSHELL @CHECK_CMD_2	-- OUTPUT = '1'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
SELECT @RC	-- 1 반환

 

3. 쿼리 실행 결과

쿼리 결과 값

 



임시테이블을 생성하여 EXEC 결과값을 임시테이블에 담아도 되지만 항상 임시테이블을 생성할 수 없으므로 위와 같은 방법으로 실행하였다.
결과 값에 따라서 0이면 정상 처리, 1이면 에러로 판단하여 원하는 처리를 할 수 있다.