Eu vi algumas perguntas sobre o tiro pela culatra, então tentarei ser específico sobre minha preocupação...
Eu tenho um front-end antigo (MS Access) que estou tentando reconstruir e deixei a parte que mais me incomoda por último, então aqui estou. A tarefa é 'pegar' um arquivo (costumava ser um XLS), agora seria mais provável que seja um subproduto dele, digamos CSV por causa do exemplo.
Portanto, este é meu primeiro trampolim, estou preocupado com o resultado da minha importação, de acordo com Pinal Dave BULK INSERT
é uma operação não atômica:
Se houver algum erro em alguma linha, ela não será inserida, mas outras linhas serão inseridas.
Isso não é atraente para mim, pois tendo a não confiar na entrada do usuário, quero mais controle, portanto, ser capaz de acionar um erro e não importar nenhuma parte do arquivo seria melhor. Não tenho certeza se isso efetivamente elimina a possibilidade de uso BULK INSERT
para esse processo?
Também tentei ler linha por linha e inserir usando um LOOP
ciclo, isso é eficaz, mas infelizmente demora muito, mesmo depois de otimizar meu código, passei de 15 minutos para 4, e isso é apenas para 850 registros.
Estou um pouco bravo porque o processo funcionou tão bem ao executar a partir do front-end do Access. Isso foi por causa do DoCmd.TransferSpreadsheet
método VBA. Isso permitiu a importação rápida de XLS para uma tabela temporária e, a partir dessa, a execução continuou atualizando as tabelas.
Gostaria de saber quais outras opções os caras tentaram ao importar dados de fontes de arquivo simples para o SQL Server. Confesso que estou um pouco confuso neste ponto.
Qualquer ajuda seria apreciada.
BULK INSERT
emVARCHAR(MAX)
minha opinião, você não deve ter erros e, a partir daí, pode manipular os dados conforme necessário e executar o SQL padrão para garantir que ele se encaixe nos seus requisitos antes de colocá-lo na tabela de destino. Apenas uma sugestão, mas é como eu fiz no passado.