SSIS OLE DB 대상-설명이없는 오류 출력 리디렉션 오류

Nov 26 2020

이상한 일을 겪고 있습니다. 테이블에서 데이터를 가져 오는 OLE DB 원본이있는 SSIS 패키지 내에 데이터 흐름 작업이 있습니다. 그러면 행 키가 대상 테이블 (대상 테이블의 기본 키)에 이미 있는지 확인한 다음 조회 없음을 확인하는 조회 변환이 있습니다. 일치 출력이 OLE DB 대상에 연결됩니다. 또한 오류 메시지 및 오류 열을 가져 오는 스크립트 구성 요소에서 OLE DB 대상의 오류 출력을 연결하여 오류가 발생하고 해당 데이터를 예외 테이블에 삽입합니다.

내가 직면 한 문제는 내 소스 테이블에 중복 행 키가 있으므로 오류가 OLE DB 대상에서 내 예외 테이블로 리디렉션되지만 예외 테이블에서 발생한 오류에 대한 설명은 "사용 가능한 상태가 없음"입니다. "대신"PRIMARY KEY 제약 조건 위반 .. 객체에 중복 키를 삽입 할 수 없습니다 .. 중복 키 값은 .. "입니다. 다음은 패키지의 스크린 샷이며 다음은

스크립트 코드입니다.

public bool fireAgain = true;
public string customErrorDescription;
public string customErrorDescription;
public string ErrorDescription;
public string ErrorColumnDescription;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
try
{
    var component130 = ComponentMetaData as IDTSComponentMetaData130;

    if (component130 != null)
    {
        Row.DateTimeInserted = DateTime.Now;

        if (Row.ErrorColumn <= 0)
        {
            ErrorColumnDescription = "No Data available - Unknown Error";
        }
        else if (Row.ErrorColumn > 0)
        {

            ErrorColumnDescription = component130.GetIdentificationStringByID(Row.ErrorColumn);
        }
        ErrorDescription = component130.GetErrorDescription(Row.ErrorCode).Replace("\r\n", " ");

        //Writes the error as Information in Logging
        customErrorDescription =
         $"Error in OLE DB Destination:{ErrorDescription}" + $"In Column: {ErrorColumnDescription}";
        ComponentMetaData.FireInformation(10, "Error", "Error", ErrorDescription, 0, fireAgain);

        Row.ErrorDescription = ErrorDescription;
        Row.ErrorColumnDescription = ErrorColumnDescription;
        Row.DestinationTableName = Variables.DestinationTable;
        Row.SourceName = "Source_View";
        Row.SourceType = "View";
    }
}
catch (Exception Ex)
{
    ComponentMetaData.FireError(10, "Error", Ex.Message, Ex.Message, 0, out fireAgain);
}

}

자르기 또는 null이 허용되지 않는 열의 null 삽입과 같은 다른 오류에서 이것은 잘 작동하는 것 같습니다.

예를 들어 잘림에서 "데이터 값이 공급자가 사용하는 유형을 오버플로했기 때문에 변환에 실패했습니다."라는 메시지가 표시됩니다. NULL 제약 조건 위반에서 "데이터 값이 무결성 제약 조건을 위반합니다."라는 메시지가 나타납니다.

Dublicate 키 삽입에서만 이런 일이 발생하는 이유에 대한 제안이나 생각이 있습니까? 미리 감사드립니다!

답변

Hadi Nov 29 2020 at 21:02

두 가지 유형의 유효성 검사가 OLE DB 대상에서 수행됩니다. (1) 클라이언트 측 및 (2) 서버 측. 자세한 내용은 다음 답변을 확인할 수 있습니다.

  • 빠른로드 오류 출력이 전체 배치를 리디렉션하지 않음

SSIS 엔진은 런타임시 서버 측 오류 (외래 키, 트리거 ...)에 대한 설명을 포착하지 않지만 클라이언트 측 유효성 검사 오류의 설명 (잘림, Not null ...)을 읽을 수 있습니다.