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

Insertar en una tabla de errores cuando hago una transaccion

Estas en el tema de Insertar en una tabla de errores cuando hago una transaccion en el foro de SQL Server en Foros del Web. Buenas a todos, estoy utilizando una transaccion para guardar en varias tablas, Si la transaccion falla, muestro un cero, sino, muestro un 1 Pero lo ...
  #1 (permalink)  
Antiguo 04/08/2011, 08:39
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Insertar en una tabla de errores cuando hago una transaccion

Buenas a todos, estoy utilizando una transaccion para guardar en varias tablas,
Si la transaccion falla, muestro un cero, sino, muestro un 1
Pero lo que yo realmente quiero es no mostrar ese cero, sino insertar en una tabla de errores, el error que se genero
Inicialmente la tengo asi:
Código SQL:
Ver original
  1. BEGIN TRANSACTION BEGIN TRY
  2.  INSERT INTO HCINGRES VALUES ('5820700','0000700724', 'COX001','176', '04/08/2011 09:24:05', '2', '05/09/1981','0' , '1', '9', '15' ,'04/08/2011 09:24:05', '1110490997', NULL, NULL, '0', 'N', '0', NULL, '0', '1501 ', '1', '1', NULL)
  3. INSERT INTO HMCOX001(GPACODIGO ,AINCONSEC, HCCTIPOHC, HCCONFOLI, GMECODIGO, HMFECHARE,EQUIPOX,FECFIN,FECINI,OBSERVA) VALUES ('5820700' , '0000700724' , 'COX001' , '176' ,'1110490997' , '04/08/2011 09:24:05','0','20110804 09:24','20110804 09:24','')
  4. SELECT '1' AS RES COMMIT TRANSACTION END TRY BEGIN CATCH
  5. SELECT '0' AS RES ROLLBACK TRANSACTION
  6. END CATCH

Para que me agregue a la tabla lo hago asi:

Código SQL:
Ver original
  1. BEGIN TRANSACTION BEGIN TRY
  2. INSERT INTO HCINGRES VALUES ('5820700','0000700724', 'COX001','176', '04/08/2011 09:24:05', '2', '05/09/1981','0' , '1', '9', '15' ,'04/08/2011 09:24:05', '1110490997', NULL, NULL, '0', 'N', '0', NULL, '0', '1501 ', '1', '1', NULL)
  3. INSERT INTO HMCOX001(GPACODIGO ,AINCONSEC, HCCTIPOHC, HCCONFOLI, GMECODIGO, HMFECHARE,EQUIPOX,FECFIN,FECINI,OBSERVA) VALUES ('5820700' , '0000700724' , 'COX001' , '176' ,'1110490997' , '04/08/2011 09:24:05','0','20110804 09:24','20110804 09:24','')
  4. SELECT '1' AS RES
  5.  COMMIT TRANSACTION END TRY BEGIN CATCH
  6.  INSERT INTO HCERRORTRAN VALUES ('0000700724', '176', '5820700', NULL) ROLLBACK TRANSACTION
  7. END CATCH

Pero no me esta ingresando nada en la tabla HCERRORTRAN, si la transaccion falla, como puedo manejar los errores en una transaccion?

Espero me puedan dar alguna guia o si tienen enlaces me los puedan dar

Muchas gracias
  #2 (permalink)  
Antiguo 04/08/2011, 08:50
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, 8 meses
Puntos: 774
Respuesta: Insertar en una tabla de errores cuando hago una transaccion

http://msdn.microsoft.com/en-us/library/ms175976.aspx

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 04/08/2011, 08:59
 
Fecha de Ingreso: agosto-2011
Mensajes: 8
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Insertar en una tabla de errores cuando hago una transaccion

Hola, fijate que luego de begin Catch realizas el INSERT y luego el ROLLBACK,
en tu caso, ROLLBACK deberia ser primero y luego el INSERT como última consulta.

algo asi...
COMMIT TRANSACTION END
TRY BEGIN CATCH
ROLLBACK TRANSACTION
INSERT INTO HCERRORTRAN
VALUES ('0000700724', '176', '5820700', NULL)
END CATCH

de lo contrario el ROLLBACK afecta tu Inserción anterior.

Prueba y comenta.

Saludos.
  #4 (permalink)  
Antiguo 04/08/2011, 09:10
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Insertar en una tabla de errores cuando hago una transaccion

Givani si me funciono, una ultima pregunta:
Para insertar el respectivo error, como lo hago, encontre lo siguiente:

@@ERROR

ERROR_MESSAGE()

Cual de los dos, o como inserto el error respectivo que se haya generado?...muchas gracias
  #5 (permalink)  
Antiguo 04/08/2011, 09:18
 
Fecha de Ingreso: agosto-2011
Mensajes: 8
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Insertar en una tabla de errores cuando hago una transaccion

Cita:
Iniciado por oscarbt Ver Mensaje
Givani si me funciono, una ultima pregunta:
Para insertar el respectivo error, como lo hago, encontre lo siguiente:

@@ERROR

ERROR_MESSAGE()

Cual de los dos, o como inserto el error respectivo que se haya generado?...muchas gracias
Hola, en el caso de @@ERROR es una variable interna de SQL que solo te entrega el código de error. En SQL 2000 se usaba mayormente para validar si tu consulta se había ejecutado bien y condicionar la accion (ROLLBACK, Mensajes etc..).

Yo normalmente uso:

begin catch
SELECT
ERROR_NUMBER() AS Numero_de_Error
,ERROR_SEVERITY() AS Severidad
,ERROR_STATE() AS Estado
,ERROR_PROCEDURE() AS Nombre_Procedimiento
,ERROR_LINE() AS Linea
,ERROR_MESSAGE() AS Mensaje
end catch

puedes usar cualquiera de esos campos e insertarlos en tu tabla.

Saludos!
  #6 (permalink)  
Antiguo 04/08/2011, 09:55
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Insertar en una tabla de errores cuando hago una transaccion

Muchas gracias, ya logre solucionar el problema....

Etiquetas: errores, select, tabla, transacciones
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:34.