Hace tiempo que tengo funcionando un par de aplicaciones hechas bajo SQL
Server. Os comento un par de conclusiones que he sacado, muy interesantes
acerca del trabajo con triggers.
Estas potentísimas herramientas de SQL, si no se miman mucho pueden dar más
problemas que alegrías.
Primero os diré dos cláusulas que tienen que ir siempre al principio de casi
cualquier trigger (justo después del as) y luego os explico porqué.
if @@rowcount = 0
return
set nocount on
Lo primero es porque muchas veces, puede desencadenarse un trigger de una
tabla, cuando en realidad no ha habido ninguna fila afectada en la acción
que lo ha desencadenado. Por ejemplo, cuando hay dos tablas A y B con una
relación, y tienen activada la opción actualización o eliminación en
cascada, al realizar una modificación en la tabla A, aunque no afecte a
ningún registro de la tabla B los triggers saltan. Si no habéis previsto en
el código del trigger que puede no haber filas afectadas se pueden producir
resultados inesperados (como me ha pasado a mi). Utilizando el control (if
@@rowcount = 0), se consigue que no se ejecute el código del trigger a no
ser que sea realmente necesario.
La segunda es fundamental si trabajáis con ADO. No solo para evitar que se
manden mensajes innecesarios al cliente, sino porque he comprobado que
muchas veces, ADO se vuelve loco (sobre todo con los mensajes de error) al
recibir los mensajes innecesarios que se generan dentro del trigger. Y esto
vale también para storeds.
Saludos y espero que os evite alguno de los problemas que yo he tenido por
culpa de esto.
Leer las respuestas