비 유니 코드 문자열을 유니 코드 문자열 SSIS로 변환


9

데이터베이스의 데이터를 빈 Excel 파일로 내보낼 패키지를 만들고 있습니다. 소스 및 대상 구성 요소 만 추가하고 패키지를 실행하면 출력 열과 열 "A"가 유니 코드와 비 유니 코드 문자열 데이터 유형 사이에서 변환 할 수 없다는 변환 오류가 발생했습니다.

이 문제를 해결하기 위해 데이터 변환 구성 요소를 추가하고 모든 열을

"유니 코드 문자열 [DT_WSTR]"

더 이상 오류가 발생하지 않았습니다. 유일한 문제는 약 50 개의 열이있어서 1x1로 이동하고 드롭 다운 목록에서 "Unicode String [DT_WSTR]"을 선택해야한다는 것입니다. 그런 다음 대상 구성 요소로 이동하여 새로 변환 된 열을 내 Excel 파일에 매핑해야했습니다.

내 질문은 다른 사람 이이 문제를 겪었다면 모든 수동 데이터 형식 변환을 수행 해야하는 더 효율적인 방법이 있습니까? 모든 열을 하나씩 변환하고 매핑 해야하는 것은 특히 많은 수의 행이있는 경우 실용적이지 않은 것 같습니다.

Excel 파일은 데이터를 가져오고 내보내는 가장 좋은 방법은 아니지만이 특별한 경우에 필요한 것임을 이해합니다.

플랫 텍스트 파일로 내보내고 패키지의 마지막 단계로 Excel로 변환하는 방법을 찾을 수 있습니다. 나는 이것이 동일한 유니 코드 / 비 유니 코드 변환 오류를 유발하지 않기를 바랍니다.


그 후 손목 관절 증후군은 어떻습니까? :-)
Patrick Honorez

데이터를 이동하는 테이블이 유니 코드 데이터 형식을 사용하는지 확인하십시오 (예 : varchar (50) 대신 nvarchar (50))
MacGyver

답변:


15

RDC의 대안으로 SSIS에서 데이터 유형 변환을 건너 뛰고 소스 쿼리에서 nvarchar로 명시 적으로 캐스트합니다.

용법

소스 쿼리에서 (당신이 하는 소스 쿼리를 사용 하지 단순히 드롭 다운에서 테이블을 선택), 명시 적으로 적절한 N (VAR) 문자 길이에 물건을 캐스팅합니다.

대신에

SELECT
    E.BusinessEntityID
,   E.NationalIDNumber
,   E.LoginID
,   E.JobTitle
,   E.BirthDate
,   E.MaritalStatus
,   E.Gender
FROM
    HumanResources.Employee AS E

다음과 같은 쿼리를 사용하십시오.

SELECT
    CAST(E.BusinessEntityID AS nvarchar(10)) AS BusinessEntityID
,   CAST(E.NationalIDNumber AS nvarchar(15)) AS NationalIDNumber
,   CAST(E.LoginID AS nvarchar(256)) AS LoginID
,   CAST(E.JobTitle AS nvarchar(50)) AS JobTitle
,   CAST(E.BirthDate AS nvarchar(10)) AS BirthDate
,   CAST(E.MaritalStatus AS nchar(1)) AS MaritalStatus
,   CAST(E.Gender AS nchar(1)) AS Gender
FROM
    HumanResources.Employee AS E

어드벤쳐 웍스 학생들은 데이터가 이미 n(var)char유형 이었음을 인식 할 것 입니다. 그러나 이것은 단지 개념을 설명하기위한 것일뿐입니다.

혜택

  • 사용되는 메모리가 적습니다. 현재 Data Conversion Component는 SSIS 를 사용하여 "동일한"데이터의 두 복사본을 할당하고 저장하는 중입니다.
  • RSI가 없습니다 . N 번 클릭 할 필요가없고 그들이 제공하는 끔찍한 편집기에서 모든 정보를 지정할 필요가 없습니다. dmv / information_schema에 대한 쿼리를 사용하여 "Excel ready"테이블 내보내기 생성을 추가로 자동화합니다.
  • 맞춤 구성 요소 설치가 없습니다. 오픈 소스 설치가 활발한 곳에서 일했습니다. 이 코드를 유지하기 위해 같은 응용 프로그램을 설치 이제 "사람"의 요구로 타사 응용 프로그램을 설치하기 지연된 유지 보수 비용도 하고 이 서버에 설치 얻을 필요 하고 그들이 반드시이있는 거 유효 확인하기 위해 어셈블리를 면밀히 검토 할 INFOSEC 요구 그리고 우리는 당신보다 순위가 높아야 bajillion 사람들로부터 signoffs이 필요합니다 ...

1
"RCD의 대안"-RDC 란 무엇입니까? 다음 답변을 읽으면 데이터 구성 요소 교체를 의미한다고 생각하지만 원래 게시물의 작성자가 해당 구성 요소를 언급하지 않았기 때문에 약어에 비해 너무 빠를 수 있습니다. :-)
Thronk

RSI에 대해 말하면 , 논란이 CONVERTCAST
앞당겨 져


2

"유니 코드 문자열 (DT_WSTR)"에서 "문자열 (DT_STR)"또는 그 반대로 만 변경해야하는 경우 다음을 수행 할 수 있습니다.

  1. package.dtsx- 파일의 사본을 저장하십시오 (복구해야하는 경우)
  2. 편집기 또는 MS Visual Studio에서 package.dtsx를 패키지를 마우스 오른쪽 단추로 클릭하고 "코드보기"를 선택하십시오. XML 파일이 나타납니다.

문자열 DTS:DataType뒤에 = "130"이 있으면 문자열을 검색 하면 열은 DT_WSTR (유니 코드)로 정의됩니다.

그 뒤에 = "129"가 있으면 열이 DT_STR (비 유니 코드)로 정의되고 검색을 사용하고주의해서 바꿉니다 (이전에 복사 한 적이 있습니까?)

파일을 저장하면 아마도이 파일 일 것입니다.


1
DBA SE에 오신 것을 환영합니다! 전문가 팁 :이 사이트에는 게시물을보다 잘 보이게하는 다양한 텍스트 서식 기능이 있습니다. 편집기 텍스트 상자 상단의 아이콘을 사용하십시오.
peterh-복원 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.