Aprimorando uma saída de erro com o componente Script
Aplica-se a: SQL Server SSIS Integration Runtime no Azure Data Factory
Por padrão, as duas colunas extras em uma saída de erro do Integration Services, ErrorCode e ErrorColumn, contêm apenas códigos numéricos que representam um número de erro e a ID da coluna na qual o erro ocorreu. Esses valores numéricos podem ser de pouca utilidade sem a descrição do erro e o nome da coluna correspondentes.
Este tópico descreve como adicionar a descrição de erro e o nome da coluna a 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 específico e predefinido do Integration Services, usando o método GetErrorDescription da interface do IDTSComponentMetaData100, disponível através da propriedade ComponentMetaData do componente Script. Em seguida, o exemplo adiciona o nome da coluna que corresponde à ID de linhagem capturada usando o método GetIdentificationStringByID da mesma interface.
Observação
Se desejar criar um componente que possa ser reutilizado mais facilmente em várias tarefas de fluxo de dados e em vários pacotes, procure utilizar o código deste exemplo de componente Script como o ponto inicial de um componente de fluxo de dados personalizado. Para obter mais informações, consulte Desenvolvendo um componente de fluxo de dados personalizado.
Exemplo
O exemplo demonstrado aqui usa um componente Script configurado como uma transformação para adicionar a descrição de erro e o nome da coluna a dados de saída de erro existentes no fluxo de dados.
Para obter mais informações sobre como configurar o componente Script para uso como uma transformação no fluxo de dados, consulte Criando uma transformação síncrona com o componente Script e Criando uma transformação assíncrona com o componente Script.
Para configurar esse exemplo de componente Script
Antes de criar o novo componente Script, configure um componente upstream no fluxo de dados para redirecionar linhas para sua saída de erro quando um erro ou truncamento ocorrer. Por motivo de teste, você pode configurar um componente de forma a assegurar que os erros ocorram – por exemplo, configurando uma transformação Pesquisa entre duas tabelas em que a pesquisa vai falhar.
Adicione um novo componente Script à superfície de designer Fluxo de Dados e configure-o como uma transformação.
Conecte a saída de erro do componente upstream ao novo componente Script.
Abra o Editor de Transformação Scripts e, na página Script, para a propriedade ScriptLanguage, selecione a linguagem de script.
Clique em Editar Script para abrir o IDE do Microsoft VSTA (Visual Studio Tools for Applications) e adicionar o código de exemplo mostrado abaixo.
Feche o VSTA.
No Editor de Transformação Scripts, na página Colunas de Entrada, selecione as colunas ErrorCode e ErrorColumn.
Na página 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 coluna nova para 255 para suportar mensagens longas.
Adicione outra nova coluna de saída do tipo String chamada ColumnName. Aumente o tamanho padrão da nova coluna para 255 para dar suporte a mensagens longas.
Feche o Editor de Transformação Scripts.
Anexe a saída do componente Script a um destino satisfatório. Um destino de arquivo simples é o mais fácil de configurar para testar ad hoc.
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);
}
}
}
}
Consulte Também
Tratamento de erro em dados
Usando saídas de erro em um componente de fluxo de dados
Criando uma transformação síncrona com o componente Script