Назначение SSIS OLE DB - ошибка перенаправления вывода ошибок без описания

У меня что-то странное. У меня есть задача потока данных в пакете SSIS с источником OLE DB, который извлекает данные из таблицы - тогда есть преобразование "Поиск", которое проверяет, существует ли уже ключ строки в таблице назначения (первичный ключ в таблице назначения), затем поиск № match Выход подключен к OLE DB Destination. Я также подключил вывод ошибок назначения 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 я получаю: "Значение данных нарушает ограничения целостности".

Любые предложения или мысли о том, почему это происходит только при вставке дублированного ключа? Заранее спасибо!

1 ответ

Следует отметить, что для назначения OLE DB выполняются два типа проверки: (1) на стороне клиента и (2) на стороне сервера. Вы можете проверить следующий ответ для получения более подробной информации:

Механизм SSIS не улавливает описания ошибок на стороне сервера (внешние ключи, триггеры...) во время выполнения, в то время как описания ошибок проверки на стороне клиента (усечение, Not null...) доступны для чтения.

Другие вопросы по тегам