Compartilhar via


Simulando uma saída de erro para o componente Script

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 este exemplo que olha para a coluna CountryRegionName, você pode usar a exibição simplesmente Person.vStateCountryProvinceRegion ou você pode 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 como a linguagem de script que você quer usar para codificar o script.

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

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

  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 apenas 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 com 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();

  }

}
Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os downloads, artigos, exemplos e vídeos da Microsoft mais recentes, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN:


Para receber uma notificação automática dessas atualizações, assine os RSS feeds disponíveis na página.

Consulte também

Tarefas

Tratamento de erros em dados

Conceitos

Usando saídas de erro em um componente de fluxo de dados

Criando uma transformação síncrona com o componente Script