Tengo las siguientes tablas:salto sobre/ignoran las filas duplicadas en el inserto
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
y ItemId
son las columnas de clave principal.
que estoy haciendo un inserto que se ejecuta periódicamente durante todo el día (en un procedimiento almacenado):
insert into DataValue(DateStamp, ItemId, Value)
select DateStamp, ItemId, Value from tmp_holding_DataValue;
Esto mueve los datos desde la mesa de recogida (tmp_holding_DataValue
) a través en la tabla de datos principal (DataValue
). La mesa de espera se trunca.
El problema es que, como en el ejemplo, la tabla de espera podría contener elementos que ya existen en la tabla principal. Como la clave no permitirá valores duplicados, el procedimiento fallará.
Una opción sería poner una cláusula WHERE en el proceso de inserción, pero la tabla de datos principal tiene 10 millones + filas, y esto podría llevar mucho tiempo.
¿Hay alguna otra manera de obtener el procedimiento para omitir/ignorar los duplicados mientras se intenta insertar?
¿Qué ocurre si la columna 'Valor' en la tabla de espera es diferente, p. para la primera fila, ¿es '3253' en lugar de' 6541'? ¿Es eso todavía un duplicado? De lo contrario, ¿es algo que desea actualizar (por ejemplo, agregue '6541 + 3253' en la tabla fuente) o simplemente reemplace? –
La columna de valor no importa, si se ignora su diferente, lo que está en el DataValue ya para esa marca de fecha debe dejarse como está – finoutlook
También es muy útil etiquetar su pregunta con la * versión * mínima de SQL Server que usted Necesito apoyarNo ofrecí una solución 'MERGE' porque inicialmente no tenía ni idea de qué versión estaba usando. –