Como hacer que no se detenga la ejecución ante un error?

14/04/2009 - 16:27 por Pedro J. Reguera | Informe spam
Hola:

¿existe algo parecido al on error en TSQL para que siga ejecutándose una
instrucción de carga masiva aunque se produzca un error?.
Me explico, simplificando mucho tengo que hacer un INSERT INTO
tabla1(campo11, campo12, campo13) SELECT FROM
tabla2(campo21,campo22,campo23).
El caso es que en tabla1 hay una clave NO duplicada que es campo11+campo12 y
el SELECT de tabla2 me devuelve registros con valores iguales en campo21 y
campo22. Lo que quiero es que estos registros lógicamente, al estar
duplicados no se inserten en la tabla1, pero el resto si. Lo que ocurre
ahora es que en cuanto llega a un registro con valor duplicado el proceso se
para.
Por favor, no decirme que haga un GROUP BY en tabla2 para evitar los
duplicados, como digo esto está simplificado y el SELECT origen de los datos
por su complejidad no es susceptible de hacer un GROUP BY.

Gracias y un saludo.
Pedro J.
 

Leer las respuestas

#1 Carlos Sacristan
14/04/2009 - 16:55 | Informe spam
Mmm... lo veo complicado. Veo tres opciones: o bien deshabilitas las
restricciones que tengas en tabla1 para que no lance ningún error y luego
ejecutes un proceso de "limpieza" de datos (eliminando duplicados por
ejemplo) o bien vayas fila a fila para que el proceso de validación se haga
antes del insert y no tengas que tocar la tabla destino. Otra opción es
realizar las validaciones "a mano" en una tabla temporal (te recomiendo
hacerlo mediante SELECT... INTO porque es una operación que puede ser
mínimamente registrada) y luego hacer el insert en la tabla final con los
datos ya correctos.

Cualquiera de las opciones te permite no modificar la consulta original, que
es la premisa que querías cumplir

Probablemente sea más eficiente la tercera opción, pero es algo que deberás
validar en tu entorno.
"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil. si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba

"Pedro J. Reguera" escribió en el mensaje
news:
Hola:

¿existe algo parecido al on error en TSQL para que siga ejecutándose una
instrucción de carga masiva aunque se produzca un error?.
Me explico, simplificando mucho tengo que hacer un INSERT INTO
tabla1(campo11, campo12, campo13) SELECT FROM
tabla2(campo21,campo22,campo23).
El caso es que en tabla1 hay una clave NO duplicada que es campo11+campo12
y el SELECT de tabla2 me devuelve registros con valores iguales en campo21
y campo22. Lo que quiero es que estos registros lógicamente, al estar
duplicados no se inserten en la tabla1, pero el resto si. Lo que ocurre
ahora es que en cuanto llega a un registro con valor duplicado el proceso
se para.
Por favor, no decirme que haga un GROUP BY en tabla2 para evitar los
duplicados, como digo esto está simplificado y el SELECT origen de los
datos por su complejidad no es susceptible de hacer un GROUP BY.

Gracias y un saludo.
Pedro J.


Preguntas similares