Ojo que esto funciona en 2005 para arriba, en 2000 no hay Try Catch

 

Saludos

PabloC

 

De: [email protected] [mailto:[email protected]] En nombre de Leonardo Micheloni
Enviado el: Jueves, 29 de Enero de 2009 11:42
Para: pablo.canonico
Asunto: [dbms] ATRAPAR ERRORES

 

Creo que lo mejor es que hagas try-catch y después decida qué hacer, copio y
pego...

BEGIN TRY
 BEGIN TRANSACTION
  

....sentnacias....


  END
 COMMIT TRANSACTION
END TRY
BEGIN CATCH
 ROLLBACK TRANSACTION

  DECLARE @ErrorMessage NVARCHAR(4000);
  DECLARE @ErrorSeverity INT;
  DECLARE @ErrorState INT;

  SELECT @ErrorMessage = ERROR_MESSAGE(),
  @ErrorSeverity = ERROR_SEVERITY(),
  @ErrorState = ERROR_STATE();

  -- Use RAISERROR inside the CATCH block to return 
  -- error information about the original error that 
  -- caused execution to jump to the CATCH block.
  RAISERROR (@ErrorMessage, -- Message text.
  @ErrorSeverity, -- Severity.
  @ErrorState -- State.
  );
END CATCH

Saludos, Leonardo Micheloni.

2009/1/29 Omar Bellio <[email protected]>

Muy buenas a todos!

 

A ver... en algunas stored procedures, tengo errores atrapados de la
siguiente manera:

 

 if @@error <> 0 set @cRetVal = 'Error bla bla bla'

 

o también:

 

   if @@error > 0
    RAISERROR ('Error bla bla bla', 16, 1) --esto más que nada en triggers,
pero supongo que en sp tiene que

 

andar igual.

 

El tema es que ante determinados errores (específicamente ahora tengo el de
conflictos de integridad refrencial) no funciona el trapping y me devuelve
un espantoso mensaje que no es el mío.

 

No encontré (o no supe ver) en los BOL una pista sobre esto ¿alguna
sugerencia al respecto?

 

Ya sé que se podría chequer primero la existencia de registros en conflicto,
pero ¿se puede hacer que me devuelva para esos casos el mensaje que yo
quiero?

 

Gracias por el tiempo dedicado!

 

Responder a