Eu tenho um arquivo Excel com cerca de 500 linhas.
A tarefa de fonte de dados do Excel lê essas linhas e a tarefa de destino SQL insere 500 linhas na tabela de destino.
Se houver uma linha em branco no número da linha, digamos 400, mesmo assim a tarefa não para na linha 400 e continua até a última linha, digamos a 500ª linha.
Curioso para saber como a tarefa de fonte de dados ssis Excel sabe em qual linha parar?
Qual é a lógica, não posso dizer e duvido que esteja documentada em algum lugar.
Para "ver" o que a fonte do Excel vai consumir, supondo que você selecione a planilha e não um intervalo nomeado. Abra a planilha no Excel, pressione Ctrl-End uma vez e o Excel navegará até a última célula/coluna onde poderia haver dados. No seu exemplo de 500 linhas, ele poderia realmente ir para a linha 600 porque havia dados nessas células, ou formatação ou algum artefato onde os dados não estão mais presentes, mas algum marcador invisível ainda está na planilha. Destacar as linhas 500-600 e escolher Excluir redefinirá o marcador de final de dados para a linha 500.
Se você descobrir que a fonte do arquivo Excel está lendo muitas linhas em branco além do "fim", eu resolvo o problema identificando o que define uma linha válida de dados (a coluna ID é preenchida, SSN, SalesDate, algo ou algo que define um conjunto mínimo de dados).
Adicione uma coluna derivada:
IsInvalidRow
será do tipo Boolean, DT_BOOL, e eu uso uma expressão comoISNULL(MyCol)
ouISNULL(MyCol) || MyCol==""
etc, porém você determina o que é uma linha inválida.Adicione uma divisão condicional e use a condição
IsInvalidRow
e direcione essas linhas para nada. Conecte o caminho Padrão ao restante do fluxo de dados.Por que adiciono uma coluna extra?
Depuração/manutenção/capacidade de suporte. Se uma linha inválida estiver indo para o seu destino e você tiver toda essa lógica na Divisão Condicional, não poderá consultar a avaliação da expressão. Ao separá-lo em uma coluna explícita, você pode depurá-lo (geralmente dividindo expressões muito complexas em expressões menores e comparando a saída).