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?

questionAnswers(4)

yourAnswerToTheQuestion