728x90
ISSUE.
MSSQL BCP 로 데이터를 내린 후 MYSQL로 포팅 시 NULL 값에 대한 별도 처리 필요
해결. MSSQL 상에서 컬럼을 ISNULL 처리하여 MYSQL로 포팅
TIP.
MSSQL 로 BCP한 데이터에 ISNULL(컬럼, '\N') 으로 처리하고 MYSQL로 포팅 시 MYSQL에서 NULL로 인식 함
단계 1. 테이블 정보를 읽어와서 ISNULL을 포함한 쿼리 구문을 생성한다.
DECLARE @TABLE NVARCHAR(MAX)
DECLARE @QUERY NVARCHAR(MAX)
DECLARE @QUERY_S NVARCHAR(MAX)
SET @TABLE = 'temp'
SET @QUERY = 'SELECT '
SELECT @QUERY_S = S
FROM ( SELECT TOP 1 STUFF((SELECT ','+'ISNULL('+T.COLUMN_NAME+',''\N'')'
FROM INFORMATION_SCHEMA.COLUMNS T
WHERE TABLE_NAME = 'temp' FOR XML PATH('')),1,1,'') AS 'S'
)A
SET @QUERY = 'SELECT ' + @QUERY_S + ' FROM ' + @TABLE
SELECT @QUERY
단계 2. 생성된 구문으로 MSSQL 데이터를 내린다.
bcp "SELECT ISNULL(id,'\N'),ISNULL(v1,'\N'),ISNULL(v2,'\N'),ISNULL(v3,'\N'),ISNULL(ins_date,'\N') FROM [인스턴스명].DBO.temp" queryout [내릴파일명].TXT -S [서버] -U [ID] -P [PASSWORD] -c -k -C 949 [ 옵선들... ]
단계 3. MYSQL로 올린다.
"C:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysql.exe" -h[서버] --port [포트] -u [ID] -pw[PASSWORD] -D [인스턴스] --local_infile -e "LOAD DATA LOCAL INFILE 'C:\\test\\[내린파일명].txt' INTO TABLE [인스턴스].[테이블] CHARACTER SET euckr FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n';"
단계 4. 데이터 확인.
NULL로 들어가는것과 아닌것의 차이를 보기위해 키를 제거하고 동일한 데이터를 넣었음.
위 과정은 스크립트 생성을 통해 자동화 하여 적용해야하고,
적용 시 MSSQL -> MYSQL 테이블 CREATE 단계가 함께 이루어 진다.
LOAD DATA LOCAL INFILE 은 로컬에 있는 파일을 올리기 위해 필요한 설정이다.
MYSQL.EXE 사용 시 파일 경로는 \ -> \\ 로 변환 해야한다.
'프로그래밍 > TSQL' 카테고리의 다른 글
조인 조건절 위치에 따른 차이 설명 (SQL join where clause vs on clause) (0) | 2020.02.14 |
---|---|
MSSQL 범위 지정하여 가져오기 (0) | 2020.02.07 |
[MSSQL] TSQL 영문 대소문자 구분 비교 (0) | 2020.01.16 |
[MSSQL] 하위 버전 데이터 마이그래이션 (0) | 2020.01.02 |
[TSQL] SYSOBJECTS TYPE (0) | 2019.10.28 |
댓글