У меня есть следующие таблицы:Пропустить поверх/игнорировать повторяющиеся строки при вставке
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
и ItemId
являются столбцы первичного ключа.
Я делаю вставку, которая работает периодически в течение дня (в хранимой процедуре):
insert into DataValue(DateStamp, ItemId, Value)
select DateStamp, ItemId, Value from tmp_holding_DataValue;
Это перемещает данные из удерживающего таблицы (tmp_holding_DataValue
) через в основной таблице данных (DataValue
). Стол удерживания затем усекается.
Проблема заключается в том, что, как и в примере, таблица хранения может содержать элементы, которые уже существуют в основной таблице. Поскольку ключ не позволит дублировать значения, процедура завершится неудачно.
Один из вариантов заключается в том, чтобы поместить предложение where в вставку proc, но в таблице основных данных имеется 10 миллионов + строк, и это может занять много времени.
Есть ли другой способ заставить процедуру просто пропускать/игнорировать дубликаты при попытке вставить?
Что делать, если столбец «Значение» в таблице удержания отличается, например. для первой строки это '3253' вместо' 6541'? Это еще дубликат? Если нет, это то, что вы хотите обновить (например, добавить «6541 + 3253» в исходную таблицу) или просто заменить? –
Столбец значения не имеет значения, если его отличие игнорируется, то, что находится в DataValue уже для этой datestamp, должно быть оставлено как-есть – finoutlook
. Также очень полезно пометить ваш вопрос минимальной * версией * SQL Server, которую вы необходимо поддерживать.Я не предлагал решение «MERGE», потому что изначально я понятия не имел, какую версию вы использовали. –