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

[SOLUCIONADO] Prevenir error en procedimiento

Estas en el tema de Prevenir error en procedimiento en el foro de SQL Server en Foros del Web. Hola a todos, les tengo una pregunta muy específica acerca de un procedimiento de almacenado. Tengo tablas donde los usuario de un sistema van insertando ...
  #1 (permalink)  
Antiguo 05/03/2013, 06:47
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Prevenir error en procedimiento

Hola a todos, les tengo una pregunta muy específica acerca de un procedimiento de almacenado.
Tengo tablas donde los usuario de un sistema van insertando datos, este sistema que esta muy
mal diseñado por cierto, no tiene filtros donde le avisen al usuario que esta insertando texto
en una campo numérico o viceversa. Mi problema es el siguiente, tengo un precedimiento lineal,
que hace muchos insert, actualizaciones y tiene un poco mas de mil líneas de código. Sucede que
por el problema que les comente, hay letras en campos que deberían contener solo números y al
ejecutar algunas consultas, estas tienen error por lo mismo. Por el momento no tengo como controlar
que los usuarios ingresen bien los datos en el sistema, y cuando hay un error en alguna consulta
podrán suponer que el procedimiento se cae, pero necesito saber si existe alguna forma en que
si hay un error en algún query, el procedimiento siga ejecutanto el resto del código? o eso es imposible? :S
podría solucionarlo con poner otro filtro en la consulta donde hay el error, pero no quiero hacer
que el procedimiento sea mas lento de lo que es, ya si no hay otra posibilidad tendría que
hacer eso nada mas :/

Espero haberme explicado bien y muchas gracias.
  #2 (permalink)  
Antiguo 05/03/2013, 09:45
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: Prevenir error en procedimiento

puedes manejarlo con try y catch para cada una de tus inserciones, ya si falla una continua con la siguiente algo asi:



Código SQL:
Ver original
  1. BEGIN TRANSACTION;
  2.  
  3. BEGIN TRY
  4.     -- Generate a constraint violation error.
  5.     DELETE FROM Production.Product
  6.     WHERE ProductID = 980;
  7. END TRY
  8. BEGIN CATCH
  9.     SELECT
  10.         ERROR_NUMBER() AS ErrorNumber
  11.         ,ERROR_SEVERITY() AS ErrorSeverity
  12.         ,ERROR_STATE() AS ErrorState
  13.         ,ERROR_PROCEDURE() AS ErrorProcedure
  14.         ,ERROR_LINE() AS ErrorLine
  15.         ,ERROR_MESSAGE() AS ErrorMessage;
  16.  
  17.     IF @@TRANCOUNT > 0
  18.         ROLLBACK TRANSACTION;
  19. END CATCH;
  20.  
  21. IF @@TRANCOUNT > 0
  22.     COMMIT TRANSACTION;
  23. GO
  24. BEGIN TRANSACTION2;
  25.  
  26. BEGIN TRY
  27.     -- Generate a constraint violation error.
  28.     DELETE FROM Production.Product
  29.     WHERE ProductID = 980;
  30. END TRY
  31. BEGIN CATCH
  32.     SELECT
  33.         ERROR_NUMBER() AS ErrorNumber
  34.         ,ERROR_SEVERITY() AS ErrorSeverity
  35.         ,ERROR_STATE() AS ErrorState
  36.         ,ERROR_PROCEDURE() AS ErrorProcedure
  37.         ,ERROR_LINE() AS ErrorLine
  38.         ,ERROR_MESSAGE() AS ErrorMessage;
  39.  
  40.     IF @@TRANCOUNT > 0
  41.         ROLLBACK TRANSACTION2;
  42. END CATCH;
  43.  
  44. IF @@TRANCOUNT > 0
  45.     COMMIT TRANSACTION2;
  46. GO
y asi sucesivamente para cada una de tus transacciones :)

saludos,
Libras
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 05/03/2013, 09:55
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Prevenir error en procedimiento

:O! no tenía idea de que se podía usar el try y cath en un procedimiento :O
te pasaste muchas gracias!

Etiquetas: campos, prevenir, procedimiento, tabla
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 22:37.