SSIS는 유니코드 문자열을 텍스트 파일에 Shift-JIS 문자 코드로 출력합니다.
오류를 초래하는 패턴
SQL Server의 테이블에 있는 nvarchar 형식의 열에 Shift-JIS에서 사용할 수 없는 문자열이 있다고 가정합니다. 그건 그렇고,이 문자를 varchar 열에 넣으면 오른쪽의 "ColumnShiftJis"열과 같이 사용할 수없는 문자가 있습니다. 그것을 대체하십시오.
SSIS에서는 그림과 같이 이전 테이블의 데이터를 읽고 텍스트 파일로 출력하도록 흐름이 설정됩니다.
CSV 파일로 출력한다고 가정합니다. Shift-JIS는 CSV 파일에서 자주 사용되므로 텍스트 파일의 문자 인코딩을 Shift-JIS로 설정합니다.
이 설정을 사용하여 실행하면 출력 시 오류가 발생합니다.
다음과 유사한 오류 메시지가 나타납니다.
출력 파일도 오류가 발생했을 때 중간에 중단됩니다.
그대로 출력하려고하면 오류가 발생하므로 중간에 "데이터 변환"을 통합하십시오.
데이터 형식을 "DT_WSTR"에서 "DT_STR"으로 변환하고 Shift-JIS로 출력 할 수있는 형식으로 만듭니다.
그러나 이것을 실행하면 오류가 발생합니다. 이는 SSIS가 데이터가 누락되는 암시적 처리를 엄격하게 실패하기 때문입니다. SSIS가 텍스트 유형 해제 처리를 수행하도록 하려면 모든 문자에 대해 문자 대체를 명시적으로 지정해야 합니다.
해결 방법
데이터베이스의 테이블에서 읽을 때 SQL을 사용하여 텍스트 유형을 변경하는 방법이 있습니다. SQL인 경우 SSIS가 아닌 SQL Server 엔진이므로 오류 없이 실행할 수 있습니다. 그건 그렇고, Shift-JIS에서 사용할 수없는 모든 문자는 "?" 다음으로 변환됨: 이것은 SQL Server 측 사양입니다. SSIS가 아니더라도 결과는 SQL Server를 사용하는 모든 시스템에서 유사합니다.
ADO NET 번역기를 열고 데이터 액세스 모드를 SQL 명령으로 변경합니다. 이제 SQL을 입력할 수 있으므로 Select 문을 작성하여 데이터베이스에서 데이터를 검색합니다. Shift-JIS에서 사용할 수 없는 문자가 포함된 텍스트는 캐스트를 사용하여 varchar로 강제로 변환됩니다.
Shift-JIS에서 사용할 수 없는 문자는 SSIS로 흐르는 데이터에 이미 제거되었으므로 처리를 그대로 전달할 수 있습니다.
텍스트가 CSV에 성공적으로 기록되었음을 알 수 있습니다. 또한 Shift-JIS에서 사용할 수 없는 모든 문자는 "?" 다음과 같이 변환되었음을 알 수 있습니다.