Cuando se INSERTe un pedido, entrará en funcionamiento el trigger ActualizaVentasEmpleado y se ejecutarán las instrucciones que aparecen después de AS, en este caso actualizará (UPDATE) la tabla empleados sumará a las ventas del empleado (ventas) el importe del pedido insertado (inserted.importe), y sólo actualizará el empleado cuyo numemp coincida con el campo rep del pedido insertado (WHERE numemp=inserted.rep).
-- Ahora comprobamos que funciona SELECT * FROM empleados WHERE numemp=108; INSERT INTO pedidos (numpedido,fechapedido,rep,clie,cant,importe,fab,producto) VALUES (123456789,getdate(),108,2103,10,100,'Aci',41001) SELECT * FROM empleados WHERE numemp=108;
Vemos que al insertar un pedido de 100 € del empleado 108, sus ventas han aumentado en 100€.
ALTER TRIGGER
Permite modificar la definición del desencadenador, no permite cambiar su nombre, para cambiar el nombre de un desencadenador hay que eliminarlo (DROP TRIGGER) y volver a crearlo (CREATE TRIGGER).
ALTER TRIGGER [NombreEsquema.]NombreTrigger ON {tabla|vista} {FOR|AFTER|INSTEAD OF} {[INSERT][,][UPDATE][,][DELETE]} [WITH APPEND] AS sentencia_sql [;] [,...n ]
La sintaxis es similar a la instrucción CREATE TRIGGER.
Ejemplo:
ALTER TRIGGER ActualizaVentasEmpleados ON pedidos FOR INSERT AS UPDATE empleados SET ventas=ventas+inserted.importe FROM empleados, inserted WHERE numemp=inserted.rep AND inserted.importe IS NOT NULL;
Hemos modificado el desencadenador para que si el importe del pedido es nulo, no haga nada, no actualice con un valor nulo.
Realiza el siguiente Ejercicio Triggers para practicar la creación de desencadenadores.
En ocasiones puede ser útil inhabilitar temporalmente un desencadenador sin que por ello suponga eliminarlo, para estos casos podemos utilizar la sentencia DISABLE TRIGGER.
DISABLE TRIGGER {[NombreEsquema.]NombreTrigger [,...n] | ALL } ON {NombreTablaVista | DATABASE | ALL SERVER} [;]
Ejemplo:
DISABLE TRIGGER ActualizaVentasEmpleado ON pedidos;
Deshabilita el desencadenador que hemos creado anteriormente, si después de ejecutar esta sentencia se introduce un nuevo pedido, el empleado correspondiente no se actualizará.
Lo podemos comprobar con:
SELECT * FROM empleados WHERE numemp=108; INSERT INTO pedidos (numpedido,fechapedido,rep,clie,cant,importe,fab,producto) VALUES (123456791,getdate(),108,2103,10,300,'Aci',41001) SELECT * FROM empleados WHERE numemp=108;
DISABLE TRIGGER ALL ON pedidos;
Deshabilita todos los desencadenadores asociados a la tabla pedidos.
DISABLE TRIGGER ALL ON DATABASE;
Deshabilita todos los desencadenadores definidos en la base de datos actual.
DISABLE TRIGGER ALL ON ALL SERVER;
Deshabilita todos los desencadenadores definidos en el servidor.
Síguenos en: Facebook Sobre aulaClic Política de Cookies
© aulaClic S.L. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.