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