Você está na página 1de 10

TRIGGERS O DESENCADENADORES

Ing. BETTY SUREZ TORRES

CONCEPTOS BSICOS
Un disparador es un tipo especial de procedimiento almacenado que se ejecuta cuando se insertan, eliminan o actualizan datos de una tabla especificada. Los disparadores pueden ayuda a mantener la integridad de referencia de los datos conservando la consistencia entre los datos relacionados lgicamente de distintas tablas.

La principal ventaja de los disparadores es que son automticos:


funcionan cualquiera sea el origen de la modificacin de los datos. Cada disparador es especfico de una o ms operaciones de modificacin de datos, UPDATE, INSERT o DELETE. El disparador se ejecuta una vez por cada instruccin. 2

SINTAXIS
CREATE TRIGGER [ esquema. ]nombre_trigger ON { Tabla | Vista } { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS sentencia sql [ ; ]

TRIGGER CON DISPARADOR DE INSERCIN


Trigger que no permite eliminar ms de un registro a la vez de la tabla proveedores create trigger tr_elimina_prov on proveedores for delete as if (select count(*) from deleted)>1 begin raiserror('No puede eliminar ms de un 1 proveedor', 16, 1) rollback transaction end -delete from proveedores where idproveedor=4 or idproveedor=5

TRIGGER CON DISPARADOR DE ACTUALIZACIN


create trigger tr_insert_categorias on categorias for update as if update(nombrecategoria) print 'columna nombre de categora modificada'

EJERCICIOS
Trigger que al hacer un pedido actualiza el total de la orden y el stock del producto (BD: Pedidos)

create trigger tr_detallepedido on item for insert as update ordenpedido set total=item.subtotal+inserted.subtotal from ordenpedido, inserted, item where ordenpedido.ordid=inserted.ordid and ordenpedido.ordid=item.ordid update producto set stock=stock-inserted.cantidad from producto, inserted where producto.prodid=inserted.prodid
6

TRIGGERS CON INSTEAD OF


Los desencadenadores INSTEAD OF pasan por alto las acciones estndar de la instruccin de desencadenamiento: INSERT, UPDATE o DELETE. Se puede definir un desencadenador INSTEAD OF para realizar comprobacin de errores o valores en una o ms columnas y, a continuacin, realizar acciones adicionales antes de insertar el registro. Por ejemplo, cuando el valor que se actualiza en un campo de tarifa de una hora de trabajo de una tabla de planilla excede un valor especfico, se puede definir un desencadenador para producir un error y revertir la transaccin o insertar un nuevo registro en un registro de auditora antes de insertar el registro en la tabla de planilla.
7

EJEMPLO CON INSTEAD OF UPDATE


create trigger actualizar on proveedores instead of update as if update (nomproveedor) begin set nocount on; raiserror ('imposible actualizar los registros',16, 1) rollback tran end -select * from proveedores update proveedores set nomproveedor='aaa' where nomproveedor= 'TB EXPORT' 8

EJEMPLO CON INSTEAD OF INSERT


Trigger que en caso de insercin sobre la tabla proveedor_pais verifique la existencia del cdigo de pais correspondiente y en caso de no encontrarla no realice el proceso. create trigger tr_inserta_pais on proveedor_pais instead of insert as if exists(select idpais from paises where idpais=(select idpais from inserted)) create table proveedor_pais begin (idpais char(3) primary key, insert into proveedor_pais nombrepais varchar(40)) select * from inserted -end insert into proveedor_pais values('006','ewrewr) else rollback transaction

EJERCICIOS PROPUESTOS
1. Crear un trigger sobre la tabla pais que en caso de que se borre 2. 3. 4. 5. 6. 7.

una fila de sta elimine las respectivas filas de la tabla proveedor Trigger que en caso de insercin sobre la tabla producto verifique la existencia del cdigo de categora y del cdigo del proveedor y en caso de no encontrarlos no realice el proceso. Creamos un disparador para que no permita eliminar ms de un registro a la vez de la tabla categoras Creamos un disparador para que no permita ingresar productos de la categora bebidas Al insertar un producto verificar que el stock no sea negativo Crear un trigger de actualizacin que muestre el valor anterior y el nuevo valor de los registros actualizados en la tabla producto Crear un trigger que se active cuando eliminamos un pedido elimine los pedidos en el detalle

10

Você também pode gostar