una duda sobre el raiserror

12/12/2005 - 09:41 por Victor | Informe spam
Hola.

Haber si álguien me puede ayudar.

Tengo el siguiente SP (es un SP de pruebas):

update ic_numaco set nac_libres = 1 WHERE (nac_id = 2561454)

update ic_viaje set via_carga_disp = 0 WHERE (via_codi = 10000)

update ic_numaco set nac_libres = 0 WHERE (nac_id = 2561454)

El primer update es para inicializar.
El segundo es para que me pueda dar el error.
Y el tercero es el "bueno": al actualizar este campo, se lanza un trigger
que, si hay plazas en otra tabla, resta, y si no, quiero que de un error y
se termine la ejecución.

El trigger es tal que esto:

if (@plazas < 0)
raiserror ('no hay plazas', 16, 1)
else
codigo

El problema es que el mensaje me sale, pero el tercer update se realiza :-(

¿No hay foma de que se pare la ejecución? ¿Y si cambio el nivel de
severidad?

Si debajo del raiserror añado un rollback funciona, pero mi idea es no
ponerlo ahí.

Muchas gracias.
 

Leer las respuestas

#1 Alejandro Mesa
12/12/2005 - 17:02 | Informe spam
Victor,

El trigger esta dentro de la transaction iniciada por la sentencia que lo
disparo. Si deseas anular esa transaccion, debes usar "rollback transaction".

if (@plazas < 0)
raiserror ('no hay plazas', 16, 1)
else
codigo



if (@plazas < 0)
begin
raiserror ('no hay plazas', 16, 1)
rollback transaction
return
end
else
codigo
...


AMB

"Victor" wrote:

Hola.

Haber si álguien me puede ayudar.

Tengo el siguiente SP (es un SP de pruebas):

update ic_numaco set nac_libres = 1 WHERE (nac_id = 2561454)

update ic_viaje set via_carga_disp = 0 WHERE (via_codi = 10000)

update ic_numaco set nac_libres = 0 WHERE (nac_id = 2561454)

El primer update es para inicializar.
El segundo es para que me pueda dar el error.
Y el tercero es el "bueno": al actualizar este campo, se lanza un trigger
que, si hay plazas en otra tabla, resta, y si no, quiero que de un error y
se termine la ejecución.

El trigger es tal que esto:

if (@plazas < 0)
raiserror ('no hay plazas', 16, 1)
else
codigo

El problema es que el mensaje me sale, pero el tercer update se realiza :-(

¿No hay foma de que se pare la ejecución? ¿Y si cambio el nivel de
severidad?

Si debajo del raiserror añado un rollback funciona, pero mi idea es no
ponerlo ahí.

Muchas gracias.




Preguntas similares