Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: среда выполнения интеграции SSIS SQL Server
в Фабрика данных Azure
По умолчанию два дополнительных столбца в выводе ошибок служб Integration Services, ErrorCode и ErrorColumn, содержат только числовые коды, представляющие номер ошибки и идентификатор столбца, в котором произошла ошибка. Эти числовые значения могут быть малополезны без соответствующего описания ошибки и имени столбца.
В этом разделе описывается, как добавить имя столбца и описание ошибки к существующим выходным данным ошибок в потоке данных с помощью компонента скрипта. В следующем примере с помощью метода GetErrorDescription интерфейса IDTSComponentMetaData100, доступ к которому можно получить через свойство ComponentMetaData компонента скрипта, добавляется описание ошибки, соответствующее конкретному стандартному коду ошибки служб Integration Services. Затем в примере с помощью метода GetIdentificationStringByID того же интерфейса добавляется имя столбца, соответствующее зарегистрированному идентификатору журнала обращений и преобразований.
Примечание.
Если нужно создать компонент, который будет полезен в нескольких задачах потока данных и нескольких пакетах, рекомендуется в качестве основы использовать этот образец компонента скрипта. Дополнительные сведения см. в разделе Разработка пользовательского компонента потока данных.
Пример
В приведенном примере компонент скрипта, настроенный в качестве преобразования, используется для добавления имени столбца и описания ошибки к существующим выходным данным ошибок в потоке данных.
Дополнительные сведения о том, как настроить компонент скрипта для использования в качестве преобразования в потоке данных см. в разделах Создание синхронного преобразования с помощью компонента скрипта и Создание асинхронного преобразования с помощью компонента скрипта.
Настройка этого примера компонента скрипта
Перед созданием нового компонента скрипта настройте вышестоящий компонент в потоке данных для перенаправления строк в его вывод ошибок при возникновении ошибки или усечения. В целях тестирования, возможно, следует настроить компонент таким образом, чтобы гарантировать возникновение ошибок, — например, настроив преобразование "Уточняющий запрос" между двумя таблицами, в котором уточняющий запрос непременно приведет к ошибке.
Добавьте новый компонент скрипта в область конструктора потока данных и настройте его в качестве преобразования.
Соедините вывод ошибок вышестоящего компонента с новым компонентом скрипта.
Откройте Редактор преобразования "Скрипт" и на странице Скрипт для свойства ScriptLanguage выберите язык скрипта.
Нажмите кнопку Изменить скрипт, чтобы открыть набор средств Microsoft Visual Studio Tools для работы с приложениями (VSTA), и добавьте приведенный ниже пример кода.
Закройте среду VSTA.
В редакторе преобразования "Скрипт" на странице Входные столбцы выберите столбцы ErrorCode и ErrorColumn.
На странице Входы и выходы добавьте два новых столбца.
Добавьте новый выходной столбец типа String с именем ErrorDescription. Увеличьте длину нового столбца по умолчанию до 255 для поддержки длинных сообщений.
Добавьте еще один новый выходной столбец типа String с именем ColumnName. Увеличьте длину нового столбца по умолчанию до 255 для поддержки длинных значений.
Закройте редактор преобразования "Скрипт".
Соедините выход компонента скрипта с подходящим назначением. Назначение «Неструктурированный файл» проще всего при настройке в случае нерегламентированной отладки.
Запустите пакет.
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);
}
}
}
}
См. также
Обработка ошибок в данных
Использование выводов ошибок в компоненте потока данных
Создание синхронного преобразования с помощью компонента скрипта