Destacados del análisis del error SAPSQL_ARRAY_INSERT_DUPREC:
- Qué es – Un short dump que se produce al intentar insertar un registro duplicado en una tabla de base de datos mediante una sentencia INSERT
- Causa principal – El programa ABAP intenta insertar una clave primaria que ya existe en la tabla
- Diferencias con MODIFY – INSERT falla si el registro existe; MODIFY no falla (hace UPDATE o INSERT según corresponda)
- Más común en – Procesos batch, migraciones de datos, interfaces EDI, BAPIs de creación masiva
El error SAPSQL_ARRAY_INSERT_DUPREC es un clásico en procesos de carga de datos, migraciones y desarrollos ABAP que trabajan con inserciones masivas. Aparece cuando haces un INSERT de una tabla interna (array insert) y al menos uno de los registros ya existe en la base de datos. El comportamiento de ABAP es abortar toda la operación, no solo el registro conflictivo.
¿Qué es SAPSQL_ARRAY_INSERT_DUPREC?
Cuando un programa ABAP ejecuta INSERT ... FROM TABLE lt_tab (INSERT masivo desde una tabla interna), el runtime de ABAP envía todos los registros en un solo paquete a la base de datos (array insert). Si la base de datos encuentra que alguna de las claves primarias ya existe, rechaza toda la operación y ABAP dispara el short dump SAPSQL_ARRAY_INSERT_DUPREC. Este error es intencionado: SAP prefiere fallar con todos los datos a insertar parcialmente y dejar la base de datos en un estado inconsistente.
Síntomas típicos
- El dump aparece en procesos de carga (LSMW, LTMC, BAPI, IDOC)
- A menudo ocurre en la primera ejecución tras crear una tabla Z nueva con datos de prueba
- En idiomas, el texto corto del dump dice «Duplicate record in array insert»
- El programa suele ser uno Z o un estándar que hace INSERT masivos
Causas principales
- Datos duplicados en el origen – El fichero de entrada o tabla origen contiene registros con la misma clave primaria
- Falta de limpieza previa – No se borraron los datos existentes en la tabla destino antes de la carga
- Uso incorrecto de INSERT vs MODIFY – El programa usa INSERT donde debería usar MODIFY si existe la posibilidad de registros preexistentes
- NumIntervalo agotado – El intervalo de numeración (SNRO/SNUM) está completo y se reasignan números ya usados
- Migraciones o parches – Tablas estándar SAP conflictivas tras la aplicación de un parche que añade nuevos registros de customizing
Solución paso a paso
- Identifica el registro duplicado – En ST22 haz clic en «Debug» (o mira el campo «What happened?») para ver el valor de la tabla interna lt_tab. La herramienta de depuración te muestra qué registro(es) causan el conflicto.
- Verifica la tabla en SE11 – Comprueba la clave primaria de la tabla destino. Anota los campos de la clave.
- Consulta la tabla en SE16N – Busca en la tabla destino el registro conflictivo. Si no debería estar, bórralo (con cuidado y transacción adecuada).
- Corrige el programa – Si el programa es Z, cambia
INSERT ... FROM TABLEporMODIFY ... FROM TABLEsi es aceptable sobrescribir registros existentes. O bien añade una validación previa conSELECT SINGLEantes del INSERT. - Para cargas LSMW/LTMC – Asegúrate de que la tabla destino está vacía antes de cargar o usa «Overwrite mode» si la herramienta lo permite.
- Comprueba intervalos de numeración – Con SNRO, revisa si el intervalo está completo y ajústalo (aumenta el número final o crea un nuevo intervalo).
Notas SAP relacionadas
- SAP Note #596288 – SAPSQL_ARRAY_INSERT_DUPREC runtime error
- SAP Note #357230 – Duplicate record in table during INSERT
- SAP Note #106300 – How to avoid duplicate key violations in ABAP
¿Te ayudamos?
Contamos con una base de consultores certificados por SAP que brindan un excelente servicio de Administración SAP así como el análisis de vulnerabilidades SAP y remediación de las mismas.
Puedes contactarnos a través del formulario de contacto o a través de nuestra dirección de correo electrónico contacto@aurit.es
En AURIT estaremos encantados de poder ayudarte.