Simulando uma saída de erro para o componente Script

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

Embora não possa configurar diretamente uma saída como saída de erro no componente Script para o tratamento automático das linhas de erro, pode reproduzir a funcionalidade de uma saída de erro incorporada criando uma saída adicional e usando lógica condicional no seu script para direcionar as linhas para essa saída quando apropriado. Pode querer imitar o comportamento de uma saída de erro incorporada adicionando duas colunas de saída adicionais para receber o número de erro e o ID da coluna onde ocorreu o erro.

Se quiser adicionar a descrição de erro correspondente a um código de erro específico dos Serviços de Integração pré-definidos, pode usar o GetErrorDescription método da IDTSComponentMetaData100 interface, disponível através da propriedade do ComponentMetaData componente Script.

Example

O exemplo aqui mostrado utiliza um componente Script configurado como uma transformação que tem duas saídas síncronas. O objetivo do componente Script é filtrar linhas de erro dos dados de endereço na base de dados de exemplo AdventureWorks. Este exemplo fictício assume que estamos a preparar uma promoção para clientes norte-americanos e precisamos de filtrar endereços que não estejam localizados na América do Norte.

Para configurar o exemplo

  1. Antes de criar o novo componente Script, crie um gestor de ligações e configure uma fonte de fluxo de dados que selecione dados de endereço da base de dados de exemplo AdventureWorks. Neste exemplo, que apenas vê a coluna PaísRegiãoNome, pode simplesmente usar a vista Pessoa.vEstadoPaísProvíncia, ou pode selecionar dados juntando as tabelas Pessoa.Endereço, Pessoa.EstadoProvíncia e Pessoa.PaísRegião.

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

  3. Na página de Script , defina a propriedade ScriptLanguage para a linguagem de script que pretende usar para programar o script.

  4. Clique em Editar Script para abrir Microsoft Visual Studio Ferramentas para Aplicações (VSTA).

  5. No método Input0_ProcessInputRow , digite ou cole o código de exemplo mostrado abaixo.

  6. Fecha VSTA.

  7. Na página de Colunas de Entrada , selecione as colunas que quer processar na transformação Script. Este exemplo utiliza apenas a coluna PaísNomeRegião. As colunas de entrada disponíveis que deixar por selecionar serão simplesmente passadas sem alterações no fluxo de dados.

  8. Na página de Entradas e Saídas , adicione uma nova segunda saída e defina o seu valor SynchronousInputID para o ID da entrada, que é também o valor da propriedade SynchronousInputID da saída predefinida. Defina a propriedade ExclusionGroup de ambas as saídas para o mesmo valor não nulo (por exemplo, 1) para indicar que cada linha será direcionada apenas para uma das duas saídas. Dê à nova saída de erro um nome distintivo, como "MyErrorOutput."

  9. Adicionar colunas de saída adicionais à nova saída de erro para capturar a informação de erro desejada, que pode incluir o código de erro, o ID da coluna onde o erro ocorreu e, possivelmente, a descrição do erro. Este exemplo cria as novas colunas, ErrorColumn e ErrorMessage. Se estiver a detetar erros pré-definidos nos Serviços de Integração na sua própria implementação, certifique-se de adicionar uma coluna ErrorCode para o número de erro.

  10. Note o valor ID da coluna ou colunas de entrada que o componente Script irá verificar para condições de erro. Este exemplo utiliza este identificador de coluna para preencher o valor ErrorColumn.

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

  12. Anexe as saídas do componente Script a destinos adequados. Os destinos de ficheiros planos são os mais fáceis de configurar para testes ad hoc.

  13. Execute o pacote.

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)  
  
  If Row.CountryRegionName <> "Canada" _  
      And Row.CountryRegionName <> "United States" Then  
  
    Row.ErrorColumn = 68 ' ID of CountryRegionName column  
    Row.ErrorMessage = "Address is not in North America."  
    Row.DirectRowToMyErrorOutput()  
  
  Else  
  
    Row.DirectRowToOutput0()  
  
  End If  
  
End Sub  
public override void Input0_ProcessInputRow(Input0Buffer Row)  
{  
  
  if (Row.CountryRegionName!="Canada"&&Row.CountryRegionName!="United States")  
  
  {  
    Row.ErrorColumn = 68; // ID of CountryRegionName column  
    Row.ErrorMessage = "Address is not in North America.";  
    Row.DirectRowToMyErrorOutput();  
  
  }  
  else  
  {  
  
    Row.DirectRowToOutput0();  
  
  }  
  
}