2010-03-11 3 views
4

질문SSIS에서 CAST 오류를 방지하는 방법은 무엇입니까?

그것은 에 SSIS를 요청할 수 있나요 값반환 NULL이 경우 캐스트는 오류을 던지는 대신 을 허용되지 않습니다 캐스트?

내 환경 나는 그냥 경우 Windows Server 2003에

일반적인 상황

에서 Visual Studio 2005 및 SQL Server 2005를 사용하고

당신 ' 호기심, 여기에 내 유스 케이스입니다. 나는 어딘가에 일반 테이블 (역사와 키/값 구조)에서 오는 데이터를 저장해야 마녀는 문자열, 숫자 또는 날짜 수있는 일종의 가치가 포함되어 있습니다.

table Values { 
    Id int, 
    Date datetime, -- for history 
    Key nvarchar(50) not null, 
    Value nvarchar(50), 
    DateValue datetime, 
    NumberValue numeric(19,9) 
} 

내가 값 열에서 원시 값을 넣어 내가 그것을 캐스팅 할 수 있어요 때 DATEVALUE 열에서 같은 값을

  • 을 넣어하려고 시도하는 : 구조는이 같은 것입니다 날짜 시간
  • NumberValue 열에서
  • 내가 훨씬 더 쉽게 통합 및 조작의 모든 종류를 만들 수있는 수

그 두 입력 컬럼에 캐스팅 할 수있어 빠른에 나중에.

이제이 이상한 질문을하는 이유를 알았습니다. 당신의 도움에 미리

============

감사합니다.

답변

2

또한 파생 열 구성 요소를 시도하고 잠재적 인 날짜/숫자 필드의 값을 테스트하거나 단순히 캐스팅하고 오류를이 두 필드의 NULL 값으로 리디렉션 할 수 있습니다.

(1) 파생 열 구성 요소 (DT_DATE) [MYPOTENTIALDATE]에서 다음과 같은 문을 사용하여 매번 필드를 캐스팅하면이 캐스트에 실패한 행을 리디렉션하고 여기에서 데이터를 조작 할 수 있습니다.

또는

(2) 당신은 파생 열 구성 요소에서이 같은 수행 할 수 있습니다 ISNULL을 ([MYPOTENTIALDATE])? '2099-01-01': (DT_DATE) [MYPOTENTIALDATE]. 나는 일반적으로 '2099-01-01'을 보내는데, 날짜가 널 (NULL)을 사용하는 것보다는 오히려 NULL 일 때입니다 (큐브 등으로 더 잘 작동합니다).

물론 [MYPOTENTIALDATE] 입력란이 DATETIME 또는 NULL 이외의 다른 항목 (예 : '안녕하세요'와 같은 단어) 인 경우 물론 (2)가 작동하지 않습니다.

내가 탐구 할 수있는 옵션은 행운입니다!

+0

답변 해 주셔서 감사합니다. 나는 (1) 옵션을 조사 할 것이다. 사실 그것은 많은 오류 메시지를 생성하지만 실제로는 그렇지 않습니다. –

0

조건부 분할을 사용하고 데이터가 날짜 인 Tru는 한 경로를 따라 가고 다른 경로는 다른 경로를 따라 이동하여 삽입되기 전에 null로 업데이트됩니다.

+0

답장을 보내 주셔서 감사합니다. SSIS에서 문자열 값이 날짜 또는 숫자라고 추측하는 가장 좋은 방법 (표현식)은 무엇입니까 –

1

SSIS에서 오류 처리가 충분히 구체적이지 않은 것을 발견 한 것과 같은 종류의 문제를 다루었습니다. 내 접근 방식은 실제로 오류 테이블을 만들고 데이터가 varchar로 저장된 소스 테이블을 쿼리하고 아래와 같이 오류 테이블에 오류를 기록했습니다. 각 컬럼에 대해 아래의 진술 중 하나가 있습니다. 왜냐하면 어느 컬럼이 실패했는지 아는 것이 중요했기 때문입니다. 그런 다음 모든 오류를 기록한 후에 오류가없는 SomeInfo에서 해당 레코드를 선택하는 INSERT를 수행합니다. 귀하의 경우에는 오류 테이블의 ColumnName을 기반으로 더 많은 고급 작업을 수행하여 기본값을 삽입 할 수 있습니다.

INSERT INTO SomeInfoErrors 
      ([SomeInfoId] 
      ,[ColumnName] 
      ,[Message] 
      ,FailedValue)  
    SELECT 
     SomeInfoId, 
     'PeriodStartDate', 
     'PeriodStartDate must be in the format MM/DD/YYYY', 
       PeriodStartDate 
    FROM 
     SomeInfo 
    WHERE 
     ISDATE(PeriodStartDate) = 0 AND [PeriodStartDate] IS NOT NULL; 
+0

이 힌트를 가져 주셔서 감사합니다. 나는 이것도 분명히 사용할 것이다. –

관련 문제