2016-12-12 2 views
0

У меня есть пакет с кучей Oledb Destinations, используя SSIS 2016, который должен показывать точный столбец, который сгенерировал ошибку. ErrorColumn показывает (0) ноль, поэтому я Я не могу захватить столбец, который сгенерировал ошибку.SSIS 2016 - ErrorColumn равен 0 (ноль)

Использование сценария ниже (с кодом, который назначает «Неизвестный столбец», но это не помогает, он просто избегает скрипт обязательно):

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    //IDTSComponentMetaData130 componentMetaData = ComponentMetaData as IDTSComponentMetaData130; 
    //var component130 = this.ComponentMetaData as IDTSComponentMetaData130; 
    //if (component130 != null) 
    //{ 
    // System.Windows.Forms.MessageBox.Show(component130.GetIdentificationStringByID(Row.ErrorColumn)); 
    // Row.ErrorColumnName = component130.GetIdentificationStringByID(Row.ErrorColumn); 
    //} 
    IDTSComponentMetaData130 componentMetaData = ComponentMetaData as IDTSComponentMetaData130; 
    if (componentMetaData != null) 
    { 
     // 
     if (Row.wkpErrorColumn != 0) 
      Row.wkpErrorColumnName = componentMetaData.GetIdentificationStringByID(Row.wkpErrorColumn); 
     else 
      Row.wkpErrorColumnName = "Unknown column"; 
    } 
    else 
    { 
     Row.wkpErrorColumnName = "Cannot determine"; 
    } 
    Row.wkpErrorDescription = ComponentMetaData.GetErrorDescription(Row.wkpErrorCode); 
} 
+0

Я не использовал этот 'componentMetaData.GetIdentificationStringByID', но, возможно, ID - это идентификатор на основе 0 вместо 1 на основе, в этом случае вы не захотите проверять' Row.wkpErrorColumn! = 0', а скорее 'Row.wkpErrorColumn! = Null', по крайней мере, это сравнение в нижней части этой страницы: https: //blogs.msdn.m icrosoft.com/ssis/2015/11/27/error-column-improvements-for-ssis-data-flow-updated-for-rc2/ – Matt

+0

Перенаправить ошибки и добавить средство просмотра данных. Последние версии SSDT декодируют код ошибки и отображают фактическое сообщение об ошибке –

+0

В этом проблема. Я добавил DataViewer, но он показывает, что столбец равен нулю. –

ответ

1

В SSIS 2008 (и я считаю, также SSIS 2016), столбец с нулевой ошибкой идентифицирует ошибку, которая влияет на всю строку. В приведенном ниже примере я создал пакет, который содержит только 1 задачу потока данных в потоке управления и перенаправляет все ошибки и усечения на вывод ошибки. Размещено задание счетчика строк только для того, чтобы куда-то их отправить. Также размещены средства просмотра данных в обоих потоках ошибок, чтобы увидеть данные, выходящие из него.

В пакете потребляющего данные из плоского файла в OLE DB Destination:

enter image description here

Используя эти значения в качестве входных данных

enter image description here

И имеющий имя как рк таблица

enter image description here

Мы получаем нарушение PK, проверьте описание ошибки и столбец ошибки

enter image description here

Таким образом, когда ошибка влияет на всю запись, она получает значение ошибки столбца 0.

Надеюсь это поможет.

+0

Это может быть (влияет на всю строку). Я все еще думаю, что он должен отображать столбец, создающий проблему. –

0

Я обнаружил, что

Когда ошибка генерируется PK, ошибка влияет на всю строку, а столбец ошибки 0

Когда ошибка генерируется Fk, ошибка влияет только столбец, и вы получите значение столбца ошибки, отличное от 0

Смежные вопросы