Назначение 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...) доступны для чтения.