Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
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á.
Adicione um novo componente Script à superfície do Fluxo de Dados designer e configure-o como uma transformação.
Ligue a saída de erro do componente upstream ao novo componente Script.
Abra o Editor de Transformação de Scripts e, na página de Script , para a propriedade ScriptLanguage , selecione a linguagem de script.
Clique em Editar Script para abrir o IDE Microsoft Visual Studio Tools for Applications (VSTA) e adicione o código de exemplo mostrado abaixo.
Fecha VSTA.
No Editor de Transformação de Scripts, na página Colunas de Entrada , selecione as colunas ErrorCode e ErrorColumn.
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.
Feche o editor de transformação de guiões.
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.
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);
}
}
}
}