SSIS OLE DB Destination - Error Output Redirection Error with no Description

Nov 26 2020

ฉันกำลังเจออะไรแปลก ๆ ฉันมีงานการไหลของข้อมูลภายในแพ็คเกจ SSIS ที่มีแหล่ง OLE DB ซึ่งดึงข้อมูลจากตาราง - จากนั้นจะมีการแปลงการค้นหาซึ่งตรวจสอบว่ามีคีย์แถวอยู่แล้วที่ตารางปลายทาง (คีย์หลักในตารางปลายทาง) จากนั้นค้นหาไม่ใช่ Match Output เชื่อมต่อกับ OLE DB Destination ฉันได้เชื่อมต่อผลลัพธ์ข้อผิดพลาดของปลายทาง OLE DB ที่คอมโพเนนต์สคริปต์ซึ่งได้รับข้อความแสดงข้อผิดพลาดและคอลัมน์ข้อผิดพลาดในกรณีที่เกิดข้อผิดพลาดและแทรกข้อมูลเหล่านั้นในตารางข้อยกเว้น

ปัญหาที่ฉันพบคือฉันมีคีย์ Row ที่ซ้ำกันใน Source Table ของฉันดังนั้นในกรณีนี้ข้อผิดพลาดจะถูกเปลี่ยนเส้นทางจาก OLE DB Destination ไปยัง Exception Table แต่คำอธิบายของข้อผิดพลาดที่ฉันได้รับใน Exception Table คือ "ไม่มีสถานะพร้อมใช้งาน "แทน" การละเมิดข้อ จำกัด ของคีย์หลัก .. ไม่สามารถแทรกคีย์ที่ซ้ำกันในออบเจ็กต์ .. ค่าคีย์ที่ซ้ำกันคือ .. "นี่คือภาพหน้าจอของแพ็กเกจ

และนี่คือโค้ดสคริปต์:

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 ฉันได้รับ: "ค่าข้อมูลละเมิดข้อ จำกัด ด้านความสมบูรณ์"

ข้อเสนอแนะหรือความคิดใด ๆ เกี่ยวกับสาเหตุที่เกิดขึ้นเฉพาะกับการแทรกคีย์ Dublicate ขอบคุณล่วงหน้า!

คำตอบ

Hadi Nov 29 2020 at 21:02

คุณควรสังเกตว่ามีการตรวจสอบความถูกต้องสองประเภท y OLE DB Destination: (1) ฝั่งไคลเอ็นต์และ (2) ฝั่งเซิร์ฟเวอร์ คุณสามารถตรวจสอบคำตอบต่อไปนี้เพื่อดูรายละเอียดเพิ่มเติม:

  • เอาต์พุตข้อผิดพลาดในการโหลดอย่างรวดเร็วไม่เปลี่ยนเส้นทางทั้งชุด

เอ็นจิน SSIS ไม่พบคำอธิบายของข้อผิดพลาดฝั่งเซิร์ฟเวอร์ (คีย์ต่างประเทศทริกเกอร์ ...