Basicamente, tenho a mesma pergunta feita aqui - Maneira ideal de ignorar inserções duplicadas? - exceto no meu caso, é o SQL Server.
Eu tenho uma tabela que é uma lista de IDs de pessoas que morreram. Há muitos lugares no banco de dados de origem em que uma pessoa pode ser indicada como falecida. Eu gostaria de fazer INSERTOS de cada um desses locais nesta tabela principal, mas uma pessoa pode ser indicada como falecida em vários lugares.
Idealmente (eu acho) eu só quero ignorar erros de chave duplicada - da maneira mais eficiente possível. (Assim, não quero ter que verificar a tabela principal para os IDs como parte da minha instrução INSERT.)
(relacionado à resolução da minha dúvida, preciso de sugestões para melhorar o desempenho da visualização )
A solução para isso está na própria criação da tabela. Se eu definir
IGNORE_DUP_KEY = ON
no índice na minha coluna de ID pessoal, os valores duplicados são simplesmente ignorados e o restante é inserido adequadamente.Você também pode usar a cláusula EXCEPT em sua instrução de inserção. Provavelmente será mais rápido que a opção IGNORE_DUP_KEYS. Veja aqui para detalhes e um benchmark:
http://www.sqlservercentral.com/Forums/Topic856838-392-1.aspx
Uma terceira opção é usar o comando MERGE.
Uma quarta opção é usar o truque where not in
Eu usei uma instrução de mesclagem para fazer isso no seguinte formato:
Relendo sua pergunta, isso provavelmente não teria a eficiência que você procura, mas pode ser uma informação útil para outros leitores.