Compartilhar via


Simulando uma saída de erro para o componente Script

Aplica-se a: Tempo de execução de integração do SSIS do SQL Server no Azure Data Factory

Embora não seja possível configurar uma saída como uma saída de erro no componente Script para manipular automaticamente as linhas de erro, você pode reproduzir a funcionalidade de uma saída de erro interna criando uma saída adicional e usando lógica condicional em seu script para direcionar linhas a essa saída quando apropriado. Talvez você queira imitar o comportamento de uma saída de erro interna adicionando duas colunas de saída para receber o número de erro e a ID da coluna em que um erro ocorreu.

Se você quiser adicionar a descrição de erro que corresponde a um código de erro específico e predefinido do Integration Services, você pode usar o método GetErrorDescription da interface IDTSComponentMetaData100, disponível na propriedade ComponentMetaData do componente Script.

Exemplo

O exemplo mostrado aqui usa um componente Script configurado como uma transformação que tem duas saídas síncronas. O propósito do componente Script é filtrar linhas de erro de dados de endereço no banco de dados de exemplo AdventureWorks. Esse exemplo fictício presume que nós estamos preparando uma promoção para clientes norte-americanos e precisamos filtrar endereços que não estão localizados na América do Norte.

Para configurar o exemplo

  1. Antes de criar o novo componente Script, crie um gerenciador de conexões e configure uma origem de fluxo de dados que selecione dados de endereço do banco de dados de exemplo AdventureWorks. Para esse exemplo, que olha apenas para a coluna CountryRegionName, você pode simplesmente usar a exibição Person.vStateCountryProvinceRegion ou selecionar dados unindo as tabelas Person.Address, Person.StateProvince e Person.CountryRegion.

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

  3. Na página Script, defina a propriedade ScriptLanguage para a linguagem de script que você quer usar para codificar o script.

  4. Clique em Editar Script para abrir o Microsoft Visual Studio VSTA (Tools for Applications).

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

  6. Feche o VSTA.

  7. Na página Colunas de Entrada, selecione as colunas que você quer processar na transformação Scripts. Esse exemplo usa somente a coluna CountryRegionName. As colunas de entrada disponíveis que você não selecionar, simplesmente permanecerão inalteradas no fluxo de dados.

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

  9. Adicione colunas de saída à nova saída de erro para capturar as informações de erro desejadas, que podem incluir o código de erro, a ID da coluna em que o erro ocorreu e, possivelmente, a descrição do erro. Esse exemplo cria as colunas novas, ErrorColumn e ErrorMessage. Se você estiver capturando erros predefinidos do Integration Services em sua própria implementação, adicione uma coluna ErrorCode para registrar o número do erro.

  10. Anote o valor de ID da(s) coluna(s) de entrada em que o componente Script verificará se há condições de erro. Esse exemplo usa esse identificador de coluna para preencher o valor da ErrorColumn.

  11. Feche o Editor de Transformação Scripts.

  12. Anexe as saídas do componente Script a um destino satisfatório. Destinos de arquivo simples são os mais fáceis de configurar para testar 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();  
  
  }  
  
}  

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