본문 바로가기

RDBMS/SQL Server

유니코드 또는 비유니코드 문자열 데이터 형식으로 변환할 수 없습니다

:: 관련 링크 ; 유니코드와 비유니코드 문자열 간을 변환할 수 없음
http://msdn2.microsoft.com/ko-kr/library/aa337316.aspx

SSIS(SQL Server Integration Services)에서 데이터 흐름 작업(Data flow job)을 만들 때 위와 같이 '유니코드 또는 비유니코드 문자열 데이터 형식으로 변환할 수 없습니다' 에러가 발생하는 경우가 있다. SQL Server 내에서 유니코드-비유니코드간 암시적 변환은 별 문제 없이 일어나는데, 왜 SSIS에서는 이런 작업을 제대로 처리하지 못하는 건지는 잘 모르겠지만... Excel과 같은 외부 프로그램에서 데이터를 임포트해서 Varchar 형식의 컬럼에 맵핑하거나, 혹은 SQL Server 간에서도 Nvarchar 형식의 컬럼을 Varchar 형식의 컬럼에 맵핑하는 경우 이런 메시지가 발생하면서 Task를 수행할 수 없는 경우가 있다.

이 경우 msdn에서는 '데이터 변환' 작업을 추가해서 해당 문자열 컬럼을 비유니코드(DT_STR)에서 유니코드(DT_WSTR), 혹은 그 반대로 변환하라고 권하고 있다 :

 

image
이런 형태로 만들라는 이야기임

 

하지만 케냘의 경우에는 그렇게 해도 안 되더라. 유니코드 컬럼의 데이터를 비유니코드 컬럼으로 전송하는 경우였는데, 원본과 대상이 둘 다 SQL Server 2005(SP2)여서 그런건지도 모르겠다는 생각이 들긴 한다. 케냘의 경우 텍스트 스트림(DT_TEXT)을 사용해 보았더니 문제가 해결되었다.