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

Como capturo errores de SQL al ejecutar un Transact-SQL?

Estas en el tema de Como capturo errores de SQL al ejecutar un Transact-SQL? en el foro de Bases de Datos General en Foros del Web. Hola, gracias de antemano! estoy utilizando el Transact-SQL, con el BEGIN TRANSACTION, SAVE TRANSACTION, COMMIT TRANSACTION y ROLLBACK TRANSACTION. Si ocurre algun error en la ...
  #1 (permalink)  
Antiguo 22/10/2004, 13:01
 
Fecha de Ingreso: noviembre-2003
Mensajes: 38
Antigüedad: 20 años, 5 meses
Puntos: 0
Mensaje Como capturo errores de SQL al ejecutar un Transact-SQL?

Hola, gracias de antemano!

estoy utilizando el Transact-SQL, con el BEGIN TRANSACTION, SAVE TRANSACTION, COMMIT TRANSACTION y ROLLBACK TRANSACTION.
Si ocurre algun error en la consulta SQL, quiero realizar el rollback y si no ocurre ninguno un commit. Como puedo hacer para capturar dicho error y ponerlo en una condicion IF, o talves otra forma?

Saludos!
  #2 (permalink)  
Antiguo 22/10/2004, 19:25
 
Fecha de Ingreso: junio-2004
Mensajes: 35
Antigüedad: 19 años, 11 meses
Puntos: 0
@@error

puedes hacer algo como esto:

transaccion (update, delete....etc)
if @@error <> 0
begin
-- salir del sp o funcion
end
else
-- lo que siga o sin else
  #3 (permalink)  
Antiguo 25/10/2004, 07:48
 
Fecha de Ingreso: noviembre-2003
Mensajes: 38
Antigüedad: 20 años, 5 meses
Puntos: 0
Gracias "Mildred M." por tu ayuda, investigue @@ERROR y logre encontrar la forma de capturar esos errores.
  #4 (permalink)  
Antiguo 25/10/2004, 12:03
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Solo ten cuidado, @@error detecta el ultimo, por lo que no puede funcionar como esperas. Por ejemplo algo tan simple como:

INSERT INTO tabla VALUES (1,2,3)
IF @@Error <> 0
PRINT @@Error
ELSE
PRINT 'Todo OK'

En caso de que ocurra un error la salida de print será "0" (cero), el por que es que el "IF @@Error <> o" es otra instruccion que tambien puede producir errores.

El primer @@Error correspondería al del INSERT, pero al ejecutar el IF el valor de @@Error se sobreescribe por el resultado del IF, de manera que como el IF no falla @@Error vale 0 (que es lo que muestra en pantalla)

Espero no haberte revuelto mucho
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 25/10/2004, 12:16
 
Fecha de Ingreso: noviembre-2003
Mensajes: 38
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola! Gracias a todos por participar!
Comparto con ustedes la investigacion que acabo de hacer:

USE pubs
GO
DECLARE @del_error int, @ins_error int, @valor char(100)
-- Comienza la transaccion
BEGIN TRAN

-- Comando Delete
DELETE authors
WHERE au_id = '409-56-7088'

-- No da error
SELECT @del_error = @@ERROR

-- Comando Insert
INSERT authors
VALUES('409-56-7008', 'Bennet', 'Abraham', '415 658-9932',
'6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)

-- Ocurre un error, de clave duplicada
SELECT @ins_error = @@ERROR

-- Comprueba si existen errores
IF @del_error = 0 AND @ins_error = 0
BEGIN
IF @@ROWCOUNT = 0
SET @valor = 'No Actualizo Ningun Registro'
ELSE
SET @valor = 'La Informacion del Autor ha sido Reemplazada'

PRINT @valor
COMMIT TRAN
END
ELSE
BEGIN
/*
DECLARE @descrip as varchar(250)
SET @descrip = (SELECT description FROM master.dbo.sysmessages WHERE error=@del_error)
RAISERROR ('Error Numero:%d , Descripcion:%ls',16, 1, @ins_error,@descrip) WITH NOWAIT, SETERROR
*/
IF @del_error <> 0
SET @valor = 'Ha Ocurrido un Error durante la ejecucion del DELETE!'
PRINT @valor

IF @ins_error <> 0
SET @valor = 'Ha Ocurrido un Error durante la ejecucion del INSERT!'
PRINT @valor

ROLLBACK TRAN
END
GO

Esta bueno, me sirve! gracias por su apoyo. Que bueno es compartir el conocimiento!
Atte: Usecas
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 18:00.