Aprimorando uma saída de erro com o componente Script

Aplica-se a: SQL Server SSIS Integration Runtime em Azure Data Factory

Por defeito, as duas colunas extra numa saída de erro dos Serviços de Integração, ErrorCode e ErrorColumn, contêm apenas códigos numéricos que representam um número de erro e o ID da coluna onde o erro ocorreu. Estes valores numéricos podem ser de utilidade limitada sem a descrição de erro correspondente e o nome da coluna.

Este tópico descreve como adicionar a descrição do erro e o nome da coluna aos dados de saída de erro existentes no fluxo de dados usando o componente Script. O exemplo adiciona a descrição de erro que corresponde a um código de erro pré-definido dos Serviços de Integração, usando o GetErrorDescription método da IDTSComponentMetaData100 interface, disponível através da ComponentMetaData propriedade do componente Script. Depois, o exemplo adiciona o nome da coluna que corresponde ao ID de linhagem capturado, usando o GetIdentificationStringByID método da mesma interface.

Note

Se quiser criar um componente que possa reutilizar mais facilmente em múltiplas tarefas Fluxo de Dados e vários pacotes, considere usar o código deste exemplo de componente Script como ponto de partida para um componente data flow personalizado. Para obter mais informações, consulte Desenvolvendo um componente de fluxo de dados personalizado.

Example

O exemplo apresentado aqui utiliza um componente Script configurado como uma transformação para adicionar a descrição do erro e o nome da coluna aos dados de saída de erro existentes no fluxo de dados.

Para mais informações sobre como configurar o componente Script para uso como transformação no fluxo de dados, consulte Criação de uma Transformação Síncrona com o Componente Script e Criação de uma Transformação Assíncrona com o Componente Script.

Para configurar este exemplo de Componente de Script

  1. Antes de criar o novo componente Script, configure um componente a montante no fluxo de dados para redirecionar as linhas para a sua saída de erro quando ocorrer um erro ou truncamento. Para fins de teste, pode querer configurar um componente de forma a garantir que ocorram erros — por exemplo, configurando uma transformação de Pesquisa entre duas tabelas onde a consulta falhará.

  2. Adicione um novo componente Script à superfície do Fluxo de Dados designer e configure-o como uma transformação.

  3. Ligue a saída de erro do componente upstream ao novo componente Script.

  4. Abra o Editor de Transformação de Scripts e, na página de Script , para a propriedade ScriptLanguage , selecione a linguagem de script.

  5. Clique em Editar Script para abrir o IDE Microsoft Visual Studio Tools for Applications (VSTA) e adicione o código de exemplo mostrado abaixo.

  6. Fecha VSTA.

  7. No Editor de Transformação de Scripts, na página Colunas de Entrada , selecione as colunas ErrorCode e ErrorColumn.

  8. Na página de Entradas e Saídas , adicione duas novas colunas.

    • Adicione uma nova coluna de saída do tipo String chamada ErrorDescription. Aumente o comprimento padrão da nova coluna para 255 para suportar mensagens longas.

    • Adicione outra nova coluna de saída do tipo String chamada ColumnName. Aumente o comprimento padrão da nova coluna para 255 para suportar valores longos.

  9. Feche o editor de transformação de guiões.

  10. Anexe a saída do componente Script a um destino adequado. Um destino de ficheiro plano é o mais fácil de configurar para testes ad hoc.

  11. Execute o pacote.

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);
            }
        }
    }
}