SSIS OLE DB गंतव्य - त्रुटि आउटपुट पुनर्निर्देशन त्रुटि कोई विवरण के साथ

Nov 26 2020

मुझे कुछ अजीब सा अनुभव हो रहा है। मेरे पास एक OLE DB स्रोत के साथ SSIS पैकेज के भीतर एक डेटा फ्लो टास्क है जो तालिका से डेटा प्राप्त करता है - फिर एक लुकअप परिवर्तन होता है जो जाँचता है कि पंक्ति कुंजी पहले से ही डेस्टिनेशन टेबल (डेस्टिनेशन टेबल में प्राथमिक कुंजी) में मौजूद है या नहीं मैच आउटपुट OLE DB गंतव्य से जुड़ा है। मैंने एक स्क्रिप्ट कंपोनेंट में OLE DB डेस्टिनेशन के एरर आउटपुट को भी कनेक्ट किया है जो कि एरर मैसेज और एरर कॉलम में हो जाता है अगर कुछ गलत हो जाता है और उन डेटा को एक्सेप्शन टेबल में सम्मिलित कर देता है।

समस्या यह है कि मैं सामना कर रहा हूँ कि मेरे स्रोत तालिका में डुप्लिकेट पंक्ति कुंजियाँ हैं, तो उस स्थिति में त्रुटि OLE DB गंतव्य से मेरी अपवाद तालिका पर पुनर्निर्देशित हो जाती है, लेकिन त्रुटि तालिका में मुझे प्राप्त त्रुटि का विवरण "कोई स्थिति उपलब्ध नहीं है "के बजाय" प्राथमिक कुंजी का उल्लंघन उल्लंघन .. ऑब्जेक्ट में डुप्लिकेट कुंजी डालें .. डुप्लिकेट कुंजी मान है .. "यहां पैकेज का स्क्रीनशॉट है

और यहां स्क्रिप्ट कोड है:

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);
}

}

मैं इस बात का उल्लेख करना चाहूंगा कि अन्य त्रुटियों जैसे कि ट्रंकेशन या नल को एक कॉलम में सम्मिलित करना जिसमें नल की अनुमति नहीं है, यह ठीक काम करता है।

उदाहरण के लिए, ट्रंकेशन में, मुझे मिलता है: "रूपांतरण विफल हो गया क्योंकि डेटा मान प्रदाता द्वारा उपयोग किए गए प्रकार से बह निकला।" पूर्ण बाधा उल्लंघन में, मुझे प्राप्त होता है: "डेटा मान अखंडता बाधाओं का उल्लंघन करता है।"

कोई सुझाव या विचार क्यों यह केवल Dublicate कुंजी डालने के साथ हो रहा है? अग्रिम में धन्यवाद!

जवाब

Hadi Nov 29 2020 at 21:02

आपको ध्यान देना चाहिए कि दो प्रकार के सत्यापन किए जाते हैं y OLE DB गंतव्य: (1) क्लाइंट-साइड और (2) सर्वर-साइड। आप अधिक जानकारी के लिए निम्नलिखित उत्तर की जांच कर सकते हैं:

  • फास्ट लोड एरर आउटपुट पूरे बैच को रीडायरेक्ट नहीं करता है

SSIS इंजन रन-टाइम पर सर्वर-साइड त्रुटियों (विदेशी कुंजियों, ट्रिगर्स ...) के विवरणों को पकड़ नहीं पाता है, जबकि क्लाइंट-साइड सत्यापन त्रुटियों के विवरण (ट्रंकेशन, नॉट नल ...) पठनीय हैं।