Duplica al insertar un conjunto de resultados en una tabla

En mi aplicación tengo un informe llamado 'Informe de excepción diaria' que se usa para mostrar las excepciones de ISA. En esta tabla veo entradas duplicadas (exactamente dos filas idénticas en el informe).

Detalles técnicos.

El informe de excepciones se mostrará con los datos disponibles en un table , que son ExceptionFirstReported que tiene entradas duplicadas. los Insert Statement Acostumbrado a insert la fila en el ExceptionFirstReported está en el stored procedure usp_Refresh_Daily_Exception_Report.

INSERT INTO ExceptionFirstReported(
       InvestorReference, ExceptionReason, First_Reported_Date, RelativeRef)
  SELECT InvestorReference, ExceptionReason, Dateupdated, RelatedInvRef FROM (
      SELECT * FROM DailyExceptionReport As DER
               WHERE NOT EXISTS
                 (SELECT ExcepRptd.InvestorReference
                  FROM ExceptionFirstReported AS ExcepRptd
                  WHERE DER.InvestorReference = ExcepRptd.InvestorReference
                  AND DER.ExceptionReason = ExcepRptd.ExceptionReason
                  AND DER.RelatedInvRef = ExcepRptd.RelativeRef))
  AS CI
  JOIN currentISAs AN CI.InvestorReference = Status_Inv_Ref

Creemos que no puede haber entradas duplicadas con esta declaración en dos instancias diferentes, ya que no habrá fila que tenga idéntico InvestorReference, ExceptionReason y `RelacionInvRef.

Sin embargo, estamos teniendo entradas duplicadas. Este es el único insert declaración utilizada para insertar filas en el table. y las mesas DailyExceptionReport y currentISAs no contenía duplicados antes.

La consulta de inserción mencionada anteriormente se ha llamado en un procedimiento de almacenamiento 'usp_refresh_dailyreport' y el SP se ha ejecutado solo una vez en un ciclo.

@returnvalue = Ejecutivo usp_refresh_dailyreport

si @ valor de retorno = 1

luego

InversorReferencia Excepción Motivo First_reported_dt
Recent_reported_dt ref.relativa report_gen_date

442643169642 Saldo cero 2012-04-11 09:54:00
2012-05-04 23:58:00 NULO

442643169642 > Una ISA 2012-04-21 06:30:00 2012-04-23 23:58:00 452750423823 NULO

442643169642 > Una ISA 2012-04-21 06:30:00
2012-04-23 23:58:00 452750423823 NULO

Chicos en los datos anteriores de la tabla 'ExceptionFirstReported', las dos últimas filas son idénticas y contienen la misma referencia relativa (no nula). Disculpen a los chicos, la 'referencia relativa' no es un campo nulo, pero podría tener datos en blanco como la primera fila.

preguntado el 03 de mayo de 12 a las 18:05

1 Respuestas

¿Está ejecutando esta inserción al mismo tiempo en varios subprocesos? Dos subprocesos pueden ejecutar la verificación de existencia, no encontrar nada y hacer la inserción de los mismos datos.

Le recomiendo que agregue un índice único para asegurarse al 100% de que no está insertando registros duplicados. Es mejor tener una excepción (procesable) que datos corruptos.

Puede solucionar esto haciendo que nuestra declaración se ejecute bajo el nivel de aislamiento de transacciones serializable.

contestado el 03 de mayo de 12 a las 18:05

gracias amigo. El problema es que no puedo agregar un índice a la tabla porque con el índice principal agregado a la tabla, si la consulta de inserción intenta insertar el duplicado, el proceso se detendrá con un error. Estoy trabajando con el sistema Bank Live. Este informe tiene que ser generado diariamente. - user1373129

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.