Pular / ignorar linhas duplicadas na inserção
Eu tenho as seguintes tabelas:
DataValue
DateStamp ItemId Value
---------- ------ -----
2012-05-22 1 6541
2012-05-22 2 12321
2012-05-21 3 32
tmp_holding_DataValue
DateStamp ItemId Value
---------- ------ -----
2012-05-22 1 6541
2012-05-22 4 87
2012-05-21 5 234
DateStamp
eItemId
são as colunas-chave primárias.
Estou fazendo uma inserção que é executada periodicamente ao longo do dia (em um procedimento armazenado):
insert into DataValue(DateStamp, ItemId, Value)
select DateStamp, ItemId, Value from tmp_holding_DataValue;
Isso move os dados da mesa de espera (tmp_holding_DataValue
) através da tabela de dados principal (DataValue
). A mesa de espera é então truncada.
O problema é que, como no exemplo, a tabela holding pode conter itens que já existem na tabela principal. Como a chave não permitirá valores duplicados, o procedimento falhará.
Uma opção seria colocar uma cláusula where no insert process, mas a tabela de dados principal tem mais de 10 milhões de linhas, e isso pode levar muito tempo.
Existe alguma outra maneira de obter o procedimento para apenas ignorar / ignorar as duplicatas que ele tenta inserir?