2010-08-21 6 views
2

SSIS 2008 패키지를 개발 중이며 파생 열 변환을 만들려고합니다. 그러나 Expression Editor로 가서이 표현을 시도하면 오류가 많이 생깁니다. 나는 이것의 다양한 차별화를 시도했지만 모두 오류를 가져왔다. 더 나은 표현을 지적하기 위해 SQL 전문가 한 명이 필요합니다!SSIS 데이터 흐름 탭에서 조건식을 공식화하는 방법은 무엇입니까?

ISNULL(WITHDRAWAL_DATE)||TRIM(WITHDRAWAL_DATE)==""?NULL:CAST(WITHDRAWAL_DATE AS DATETIME)

그래서 나는이 WITHDRAWAL_DATE 입력 문자열 데이터 형식은 빈 문자열로 비교 할 - 비어 있으면 내가 다른 날짜로 캐스팅하기가 널되고 싶다.

도움을 주신 여러분 감사합니다. 나 진짜 혼란 스럽다! WITHDRAWAL_DATE는 소스 XML 파일의 DATE 데이터 유형 입력이며 이제는 내 XSD 파일의 STRING 데이터 유형으로 사용됩니다. 궁극적으로 문제는 내 XML 소스 데이터의 Withdrawal_Date 필드 중 일부가 비어 있다는 것입니다. 그래서이 레코드에 대한 데이터베이스에 Null 값을 삽입하고 싶습니다.

XSD, XLST 및 SQL 출력 테이블에 어떤 데이터 유형을 지정해야합니까? 그리고 데이터 변환 작업 또는 파생 열 Xform을 사용하는 경우에는 별 문제가되지 않지만 새로운 개념이므로 구문 구문을 보낼 수 있습니까? 내가 DATETIME2를 봤 때 이 날짜 시간 데이터 유형에 DATETIME2 데이터 형식의 변환이

그래서 범위를 벗어난 값 결과 :

@BobS : 나는이 업데이트 된 솔루션을 실행했을 때, 나는 오류가 발생했습니다 데이터 유형은 더 큰 시간/날짜 필드를 지원하는 새로운 데이터 유형입니다. 그래서이 필드 대신 DATETIME2를 사용하도록 SQL 테이블을 수정하고 DATETIME2를 사용하도록 아래의 캐스트 표현식을 수정했으나 그에 따라 변환 결과가 변경되지 않았습니다.
나는 또한 모든 파일에 대해 datetime으로 WITHDRAWAL_DATE를 변경하고 SQL 테이블을 변경하여이 필드에 대해 NOT NULL을 말하려고 시도했습니다. 그러나 이것 또한 나에게 오류를 주었다.

+0

SSIS가 생성하는 오류를 게시 할 수 있습니까? –

답변

3

이 파생 열 변환으로 해결해야 할 몇 가지 문제가 있습니다.

먼저 표현식이 수행하려고하는 열의 데이터 유형을 변경할 수 없습니다. 당신이 실제로이 일을하려고하는지 확실하지 않습니다. 그러나 출력 열이 입력 열과 같으면 변경해야합니다. 이렇게하려면 파생 열 편집기에서 파생 열 이름은 새 열 이름이어야하고 파생 열은 <add as new column>이어야합니다.

식은 두 가지 변경이 필요합니다. NULL 값을 할당하려면 NULL(data-type) 구문과 함께 null 함수를 사용합니다. 그리고 CAST 함수 구문은 (DT_datatype)columnname입니다. 따라서 표현식을 표시하는 방법은 다음과 같습니다.

ISNULL(WITHDRAWAL_DATE) || TRIM(WITHDRAWAL_DATE) == "" ? NULL(DT_DBTIMESTAMP) : (DT_DBTIMESTAMP)WITHDRAWAL_DATE 

업데이트 : 위 표현식을 사용할 수 있어야합니다. 그러나 나는 DT_DBTIMESTAMP 데이터 형식을 참조하도록 변경했습니다. SSIS DT_DBTIMESTAMP 데이터 형식이 DATETIME SQL Server 데이터 형식과 일치합니다.

원본 구성 요소에 사용해야하는 데이터 형식을 확인하려면 원본 구성 요소를 마우스 오른쪽 단추로 클릭하고 고급 편집기 표시 ...를 선택합니다. 입력 및 출력 탭을 선택합니다. 트리보기를 탐색하여 열을 찾고 관련 데이터 유형을보십시오. 고급 편집기는 대부분의 (아마도 모든) 데이터 흐름 구성 요소에서 사용할 수 있습니다.

업데이트 2 : 파생 열 구성 요소의 출력 데이터 형식이 DT_DBTIMESTAMP 대신 DT_DBTIMESTAMP2 인 경우 익스프레션에서 DT_DBTIMESTAMP 참조를 모두 변경해야합니다. 파생 열 구성 요소를 닫기 전에 식의 데이터 형식 열을 확인하십시오.변경할 수는 없지만 표현식 출력이 될 데이터 유형이 표시됩니다. 그것이 당신이 원하는 것이 아니라면, 당신의 표현에 여전히 문제가 있습니다.

소스 파일의 경우 외부 열의 데이터 형식을 변경할 수 없습니다. 적어도, 나는 그것을 할 수 없었다. SSIS에서는 원본 구성 요소에 의해 해석되는 내용으로 작업해야합니다. 파일을 변경할 수 있으면 데이터 유형을 변경하는 것이 좋습니다. 그런 다음 Derived Column 구성 요소를 사용하여 필요한 것을 제공하는 것을 변환하십시오.

+0

도움 주셔서 감사합니다. 위의 해결책을 시도했지만 내 출력 데이터 형식으로 인해 오류가 발생했습니다. 제 설명에 대한 편집을 검토 할 수 있습니까? – salvationishere

+0

제 답변에 더 많이 추가했습니다. 요약하면 고급 편집기를 사용하여 각 데이터 흐름 구성 요소의 입력 및 출력과 연결된 데이터 형식을 확인할 수 있습니다. 형식을 변환하지 않는 한 데이터 형식을 일치시켜야합니다. 그런 다음 흐름에 새 열을 추가해야합니다. – bobs

+0

고맙습니다. 업데이트 된 솔루션을 사용해 보았습니다.하지만 지금은 수정 된 설명에서 위에서 언급 한 datetime2 오류가 새로 발생하고 있습니다. – salvationishere

0

어떤 오류가 발생합니까? 그 중 하나가 캐스팅 오류라고 의심됩니다.

+0

가능성이 큽니다. 문제는 내가 시도한 모든 것에서 오류가 발생합니다. 제 설명을 편집 해 주시겠습니까? – salvationishere

관련 문제