Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Consulta con estructura de SP (manejo de errores)

Estas en el tema de Consulta con estructura de SP (manejo de errores) en el foro de SQL Server en Foros del Web. Hola tengo un graaaaaan SP que tiene una decena de insert de forma secuencial Esta es la estructura básica: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original ...
  #1 (permalink)  
Antiguo 06/01/2016, 14:18
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 9 meses
Puntos: 15
Consulta con estructura de SP (manejo de errores)

Hola tengo un graaaaaan SP que tiene una decena de insert de forma secuencial

Esta es la estructura básica:

Código SQL:
Ver original
  1. BEGIN Try
  2.    LOG
  3.    INSERT....
  4.    LOG
  5.  
  6.    LOG
  7.    INSERT....
  8.    LOG
  9.    
  10.    LOG
  11.    INSERT....
  12.    LOG
  13.  
  14.    .....
  15. END Try
  16. BEGIN Catch
  17.    LOG ERROR
  18.    RETURN ERROR
  19. END Catch


El problema es que si falla uno de los insert (es un insert into que puede traer tipo de datos incorrectos) deja de ejecutar el SP (obviamente).
Como puedo cambiar la estructura para que cuando falle un insert, escriba en el LOG y siga con el siguiente??

Debo hacer el try catch por cada insert en vez de uno general??
  #2 (permalink)  
Antiguo 06/01/2016, 15:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Consulta con estructura de SP (manejo de errores)

un try catch para cada proceso y uno general ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 07/01/2016, 06:12
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 9 meses
Puntos: 15
Respuesta: Consulta con estructura de SP (manejo de errores)

Y Hay forma de hacer que el registro incorrecto pase a una tabla de errores y siga haciendo el mismo insert con el registro que sigue?
  #4 (permalink)  
Antiguo 07/01/2016, 14:13
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 8 meses
Puntos: 180
Respuesta: Consulta con estructura de SP (manejo de errores)

Puedes verificar si no se hizo el INSERT, entonces tomas algunas medidas, como llevar una bitacora de errores y continuar con el proceso
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 07/01/2016, 14:27
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 9 meses
Puntos: 15
Respuesta: Consulta con estructura de SP (manejo de errores)

Cita:
Iniciado por iislas Ver Mensaje
Puedes verificar si no se hizo el INSERT, entonces tomas algunas medidas, como llevar una bitacora de errores y continuar con el proceso

Eso es lo que no se hacer, claramente registro el error en el log y todo, pero hay forma de hacer que el registro que se inserta y que tiene problemas (Ej cod 8114) pase a una tabla de err y siga con el siguiente dato en el insert??
  #6 (permalink)  
Antiguo 07/01/2016, 14:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Consulta con estructura de SP (manejo de errores)

Lo q quieres hacer se puede hacer pero registro por registro, podrias generar una tabla con los registros a insertar(tabla temporal o stage) y cada q se inserte un registro q lo elimine de esta tabla, si no lo inserta entonces no lo borra y continua con el siguiente, al final los valores q esten en la tabla seran los q tienen errores
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 07/01/2016, 15:31
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 9 meses
Puntos: 15
Respuesta: Consulta con estructura de SP (manejo de errores)

Muchas gracias, es una excelente idea trataré de implementarla
  #8 (permalink)  
Antiguo 07/01/2016, 16:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 8 meses
Puntos: 180
Respuesta: Consulta con estructura de SP (manejo de errores)

Tengo una recochina duda, ¿es una inserccion INTERACTIVA o MASIVA?, digo, una cosa es que tengas un usuario tecleando registro a registro y otra que tengas un proceso de inserccion masiva...
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 08/01/2016, 06:18
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 9 meses
Puntos: 15
Respuesta: Consulta con estructura de SP (manejo de errores)

Es un
Código SQL:
Ver original
  1. INSERT INTO table2 SELECT * FROM table1;


Ese es el problema de que no pueda, o no se me ocurra, como saltarme solo los registros incorrectos.
  #10 (permalink)  
Antiguo 08/01/2016, 11:14
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 8 meses
Puntos: 180
Respuesta: Consulta con estructura de SP (manejo de errores)

¿No puede manejarse mediante el SSIS?
__________________
MCTS Isaias Islas
  #11 (permalink)  
Antiguo 08/01/2016, 11:52
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 9 meses
Puntos: 15
Respuesta: Consulta con estructura de SP (manejo de errores)

El SSIS llama a un SP que divide una tabla del tipo

id, registro

en tablas periodo, y allí corta el registro en substring... pero hay veces que el registro viene con un '+' y debiese ser un int según la tabla destino...


Por ahora, cuando encuentra ese error, el SSIS manda un correo de error y esta el LOG también...
pero mi idea es optimizarlo y cuando encuentre un error, siga con el siguiente registro y no termine la ejecución


Si se puede, o si tienen alguna idea excelente, si no tendré que dejarlo como está.. no se me ha ocurrido nada por ahora
  #12 (permalink)  
Antiguo 08/01/2016, 13:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 8 meses
Puntos: 180
Respuesta: Consulta con estructura de SP (manejo de errores)

Pues desconozco como estas desarrolllando tu ETL, pero uno de los grandes beneficios que tienes al desarrollar ETL's con SSIS, es precisamente ese, el manejo de errores, en los cuales, si hay un error, puedes mandar tu registro a un destino y continuar con los demas registros, al final, tendras registros procesados y registros que no cumplieron con las politicas que tu definas.

No entiendo la parte donde dices, que el package manda llamar a un procedimiento, tu puedes hacer con las funciones que te proporciona el SSIS, eso y muchas mas cosas con tus campos.

Ahora bien, recuerda que dependiendo del numero de registros te convendria convertir tu ETL en un ELT, una vez en la base staging, entonces si, hacer o aplicar las formulas correspondientes.
__________________
MCTS Isaias Islas
  #13 (permalink)  
Antiguo 11/01/2016, 06:57
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 9 meses
Puntos: 15
Respuesta: Consulta con estructura de SP (manejo de errores)

Estoy pensando en crear un "CURSOR FAST_FORWARD" en vez de mi INSERT INTO y así validar los campos...

En el SSIS leo registros de un archivo plano y si hay error en alguno va un log de salida, si no se insertan en una tabla. Luego llamo a un ETL con un "Execute SQL Task" para tomar esos datos y enviarlos a otra tabla, y es allí donde no tengo control de cada registro.


Cuál es la diferencia entre ETL y ELT?? busco información pero solo salen los ETL
  #14 (permalink)  
Antiguo 11/01/2016, 14:09
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 8 meses
Puntos: 180
Respuesta: Consulta con estructura de SP (manejo de errores)

La diferencia real consiste en el TIEMPO que trascurrira en hacer uno u otro.

Como te comente, los datos, comunmente se toman de bases en produccion y la mayoria de las veces, los ETL aplican ciertos cambios o modificaciones a los datos.

Para hacer esto mucho mas rapido, se consigna que hay que "pasar la informacion en crudo", esto es, no aplicar ningun cambio, para que el tiempo sea el mas corto.

Una vez teniendo la informacion en la base staging, se aplican los cambios necesarios.

Para saber mas:
https://www.ironsidegroup.com/2015/0...ig-difference/

Ya hemos dicho por estos lugares que los CURSORES son los "asesinos" de los servidores, ya que todos los datos se cargan a memoria
__________________
MCTS Isaias Islas
  #15 (permalink)  
Antiguo 11/01/2016, 14:24
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 9 meses
Puntos: 15
Respuesta: Consulta con estructura de SP (manejo de errores)

Bue con esto terminamos el hilo si no se alargará mucho xD

Como la carga es de 2.000.000 de registros no es muy viable el cursor.
Tampoco puedo dejar que el SSIS maneje el error, ya que mis datos son cargados en una tabla y desde la tabla debo sacar los datos para insertarlos en otra... podría hacerlo en el SSIS pero necesita varias validaciones y escrituras de LOG y uno que otro update (por eso un SP).

La solución que implementé es usar "ROLLBACK TRANSACTION" y saltarme uno de los periodos... es decir si tengo 15 periodos y falla 1 los otros 14 seguiran, y el del error se avisa por email.

Gracias por todo leeré lo que mandaste

Etiquetas: estructura, manejo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:51.