Pergunta

Eu estou tentando fazer um upload em massa em um DB servidor SQL. O arquivo de origem tem duplicatas que eu quero remover, então eu estava esperando que a operação iria carregar automaticamente o primeiro, em seguida, descartar o resto. (Eu definir uma restrição de chave única). Problema é, o momento em que um envio duplicado é tentada a coisa toda falha e fica revertida. Existe alguma maneira eu posso apenas dizer-SQL para continuar?

Foi útil?

Solução

Tente massa inserir os dados para a tabela temporária e depois SELECT DISTINCT como @madcolor sugerido ou

INSERT INTO yourTable
SELECT * FROM #tempTable tt
WHERE NOT EXISTS (SELECT 1 FROM youTable yt WHERE yt.id = tt.id)

ou outro campo na cláusula WHERE.

Outras dicas

Se você está fazendo isso através de alguma ferramenta SQL como SQL Plus ou DBVis ou Toad, então eu não suspeitar. Se você está fazendo isso através de programação em uma linguagem, então você precisa dividir e conquistar. Presumivelmente, a execução de uma linha de atualização por linha e pegar cada exceção seria um processo muito demorado, por isso, em vez disso você poderia fazer uma operação em lote pela primeira vez em todo o bloco SQL, e se ele falhar, fazê-lo no primeiro semestre, e se isso falhar, fazê-lo na primeira metade do primeiro tempo. Iteração desta forma até que você tenha um bloco que tem sucesso. Descarte o bloco e fazer o mesmo procedimento no resto do SQL. Tudo o que viola uma restrição acabará como uma declaração única SQL que você sabe para registrar e descarte. Isso deve importar com o maior processamento em massa tanto quanto é possível, enquanto ainda jogando fora as linhas inválidas.

Use SSIS para isso. Você pode dizer a ele para ignorar as duplicatas. Mas, primeiro verifique se eles são verdadeiros duplicatas. E se os dados em algumas das colunas é diferente, como você sabe que é o melhor registro de manter?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top