Расширение вывода ошибок с помощью компонента скрипта

Применимо к: SQL Server Integration Runtime служб SSIS в Фабрика данных Azure

По умолчанию два дополнительных столбца в выводе ошибок служб Integration Services, ErrorCode и ErrorColumn, содержат только числовые коды, представляющие номер ошибки и идентификатор столбца, в котором произошла ошибка. Эти числовые значения могут быть малополезны без соответствующего описания ошибки и имени столбца.

В этом разделе описывается, как добавить имя столбца и описание ошибки к существующим выходным данным ошибок в потоке данных с помощью компонента скрипта. В следующем примере с помощью метода GetErrorDescription интерфейса IDTSComponentMetaData100, доступ к которому можно получить через свойство ComponentMetaData компонента скрипта, добавляется описание ошибки, соответствующее конкретному стандартному коду ошибки служб Integration Services. Затем в примере с помощью метода GetIdentificationStringByID того же интерфейса добавляется имя столбца, соответствующее зарегистрированному идентификатору журнала обращений и преобразований.

Примечание

Если нужно создать компонент, который будет полезен в нескольких задачах потока данных и нескольких пакетах, рекомендуется в качестве основы использовать этот образец компонента скрипта. Дополнительные сведения см. в разделе Разработка пользовательского компонента потока данных.

Пример

В приведенном примере компонент скрипта, настроенный в качестве преобразования, используется для добавления имени столбца и описания ошибки к существующим выходным данным ошибок в потоке данных.

Дополнительные сведения о том, как настроить компонент скрипта для использования в качестве преобразования в потоке данных см. в разделах Создание синхронного преобразования с помощью компонента скрипта и Создание асинхронного преобразования с помощью компонента скрипта.

Настройка этого примера компонента скрипта

  1. Перед созданием нового компонента скрипта настройте вышестоящий компонент в потоке данных для перенаправления строк в его вывод ошибок при возникновении ошибки или усечения. В целях тестирования, возможно, следует настроить компонент таким образом, чтобы гарантировать возникновение ошибок, — например, настроив преобразование "Уточняющий запрос" между двумя таблицами, в котором уточняющий запрос непременно приведет к ошибке.

  2. Добавьте новый компонент скрипта в область конструктора потока данных и настройте его в качестве преобразования.

  3. Соедините вывод ошибок вышестоящего компонента с новым компонентом скрипта.

  4. Откройте Редактор преобразования "Скрипт" и на странице Скрипт для свойства ScriptLanguage выберите язык скрипта.

  5. Нажмите кнопку Изменить скрипт, чтобы открыть набор средств Microsoft Visual Studio Tools для работы с приложениями (VSTA), и добавьте приведенный ниже пример кода.

  6. Закройте среду VSTA.

  7. В редакторе преобразования "Скрипт" на странице Входные столбцы выберите столбцы ErrorCode и ErrorColumn.

  8. На странице Входы и выходы добавьте два новых столбца.

    • Добавьте новый выходной столбец типа String с именем ErrorDescription. Увеличьте длину нового столбца по умолчанию до 255 для поддержки длинных сообщений.

    • Добавьте еще один новый выходной столбец типа String с именем ColumnName. Увеличьте длину нового столбца по умолчанию до 255 для поддержки длинных значений.

  9. Закройте редактор преобразования "Скрипт".

  10. Соедините выход компонента скрипта с подходящим назначением. Назначение «Неструктурированный файл» проще всего при настройке в случае нерегламентированной отладки.

  11. Запустите пакет.

Public Class ScriptMain      ' VB
    Inherits UserComponent
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

        Row.ErrorDescription = _
            Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)

        Dim componentMetaData130 = TryCast(Me.ComponentMetaData, IDTSComponentMetaData130)

        If componentMetaData130 IsNot Nothing Then

            If Row.ErrorColumn = 0 Then
                ' 0 means no specific column is identified by ErrorColumn, this time.
                Row.ColumnName = "Check the row for a violation of a foreign key constraint."
            ELSE If Row.ErrorColumn = -1 Then
                ' -1 means you are using Table Lock for a Memory Optimised destination table which is not supported.
                Row.ColumnName = "Table lock is not compatible with Memory Optimised tables."
            Else
                Row.ColumnName = componentMetaData130.GetIdentificationStringByID(Row.ErrorColumn)
            End If
        End If
    End Sub
End Class
public class ScriptMain:      // C#
    UserComponent
{
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);

        var componentMetaData130 = this.ComponentMetaData as IDTSComponentMetaData130;
        if (componentMetaData130 != null)
        {
            // 0 means no specific column is identified by ErrorColumn, this time.
            if (Row.ErrorColumn == 0)
            {
                Row.ColumnName = "Check the row for a violation of a foreign key constraint.";
            }
            // -1 means you are using Table Lock for a Memory Optimised destination table which is not supported.
            else if (Row.ErrorColumn == -1)
            {
                Row.ColumnName = "Table lock is not compatible with Memory Optimised tables.";
            }
            else
            {
                Row.ColumnName = componentMetaData130.GetIdentificationStringByID(Row.ErrorColumn);
            }
        }
    }
}

См. также:

Обработка ошибок в данных
Использование выводов ошибок в компоненте потока данных
Создание синхронного преобразования с помощью компонента скрипта