Przeskakuj / ignoruj duplikaty wierszy na wstawce
Mam następujące tabele:
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
iItemId
są kolumnami klucza podstawowego.
Robię wstawkę, która działa okresowo przez cały dzień (w procedurze zapisanej w bazie):
insert into DataValue(DateStamp, ItemId, Value)
select DateStamp, ItemId, Value from tmp_holding_DataValue;
Powoduje to przeniesienie danych z tabeli przechowywania (tmp_holding_DataValue
) w głównej tabeli danych (DataValue
). Tabela przetrzymywania jest następnie obcinana.
Problem polega na tym, że tak jak w przykładzie, tabela trzymająca może zawierać elementy, które już istnieją w głównej tabeli. Ponieważ klucz nie zezwala na powielanie wartości, procedura zakończy się niepowodzeniem.
Jedną z opcji byłoby umieszczenie klauzuli where w procencie insert, ale główna tabela danych ma 10 milionów + wierszy, a to może zająć dużo czasu.
Czy jest jakiś inny sposób na wykonanie procedury pomijania / ignorowania duplikatów podczas próby wstawienia?