반응형

데이터 내보내기를 이용한 유니코드 유니코드 변환 만들기

 

한대성

 

 

오늘은 개인적으로 종종 이용하는 방법에 대해 소개하고자 합니다.

SSIS 이용해서 데이터를 주고 받는 작업을 하다 보면 기존의 SQL 2000 DTS 쿼리와는 다르게 여간 까다로운 아닙니다. 여기서 까다롭다라는 것은 Unicode-NonUnicode 일치, Code Page 일치, Length 일치 등을 말합니다. 이러한 까다로움은 임의로 변환을 해서 데이터가 이상하게 전달되는 것을 막고자 하는 일반적인 ETL 툴의 특징이긴 하지만, 쿼리나 어플리케이션 등에서 생각 없이 사용했던 환경이라면 귀찮은 특징이지요.

 

예제 설명을 위해 임시 테이블들을 준비합니다.

USE TEMPDB

GO

 

CREATE TABLE NonUnicodeSource

(

             Seq INT IDENTITY,

             Col1 VARCHAR(20),

             Col2 VARCHAR (20)

)

GO

 

CREATE TABLE UnicodeSource

(

             Seq INT IDENTITY,

             Col1 NVARCHAR(20),

             Col2 NVARCHAR(20)

)

GO

 

INSERT NonUnicodeSource(Col1, Col2) VALUES ('테스트데이터', '테스트데이터')

INSERT NonUnicodeSource(Col1, Col2) VALUES ('테스트데이터', '테스트데이터')

INSERT NonUnicodeSource(Col1, Col2) VALUES ('테스트데이터', '테스트데이터')

GO

 

INSERT UnicodeSource(Col1, Col2) VALUES (N'테스트데이터', N'테스트데이터')

INSERT UnicodeSource(Col1, Col2) VALUES (N'테스트데이터', N'테스트데이터')

INSERT UnicodeSource(Col1, Col2) VALUES (N'테스트데이터', N'테스트데이터')

GO

 

CREATE TABLE NonUnicodeTarget

(

             Seq INT,

             Col1 VARCHAR(20),

             Col2 VARCHAR(20)

)

GO

 

CREATE TABLE UnicodeTarget

(

             Seq INT,

             Col1 NVARCHAR(20),

             Col2 NVARCHAR(20)

)

GO

 

 

다음과 같이 SQL 쿼리를 이용한다면 유형에 상관없이 처리됩니다.

 

INSERT NonUnicodeTarget

SELECT * FROM UnicodeSource

GO

/*

(3 row(s) affected)

*/

 

INSERT UnicodeTarget

SELECT * FROM NonUnicodeSource

GO

/*

(3 row(s) affected)

*/

 

하지만, SSIS 패키지로 만들면 다음과 같이 기분 나쁜 경고를 띄우면서 실행조차 안됩니다.

 

쿼리나 DTS에서는 암시적 변환(Implicit Conversion) 일어나서 그냥 무시하고 들어가지만 SSIS에서는 허용 하겠다라는 것이지요. 이와 관련해서는 이전에도 여러 글에서 다루었습니다.

 

코드 코드 터로

유니코드 또는 비유니코드 문자열 데이터 형식으로 변환 오류

 

정석대로 데이터 원본과 데이터 대상 간에 파생 열을 추가해서 변환을 주는 것이 가장 좋긴 합니다.



 

그런데, 테이블의 열이 많다면 아주 귀찮은 작업이지요. 필자는 열이 300개가 넘는(이걸 테이블이라고 해야하나...) 경우를 매핑한 적이 있습니다.

 

 

간혹 사용하는 방법인데, 매핑을 편리하게 하는 방법을 소개하겠습니다.

데이터 가져오기/내보내기를 이용하여 패키지를 만드는 것이지요.



 

데이터 내보내기를 이용해서 원본 테이블 또는 쿼리와 대상 테이블을 설정하고선,



 

패키지를 실행하지 말고 저장합니다.



 

저장된 패키지를 열어보면 다음과 같이 이쁘고 친절하게(^^) 변환을 해놨습니다.




 

데이터 흐름 자체를 복사해서 개발하는 패키지에 붙여 넣기 , 연결 정보만 정확히 맞춰주면 됩니다.

 

~!!!

NCHAR에서 CHAR 매핑 시킬 때에는 신경 쓰셔야 합니다. SSIS 문제가 아니라 DB 데이터 상의 문제입니다. NCHAR(10) CHAR(10)으로 데이터 옮기면 쿼리상에서도 데이터 잘린다고 에러를 냅니다. SSIS에서도 마찬가지로 패키지는 만들어지는 실행 시키면 데이터가 잘리기 때문에 에러가 발생합니다. 경우에는 변환 작업에서 길이를 배로 늘려주면 됩니다.

 , NCHAR(10) CHAR(20)으로 매핑 되도록 대상 테이블을 만들 만들어주신다면 위와 같은 방법으로 처리할 있습니다.

 

반응형

+ Recent posts