Sunteți pe pagina 1din 4

Desencadenadores o Disparadores(triggers)

Conjunto de instruciones que se ejecutan por lotes en forma automatica, al ocurrir,


en una tabla,
una de las siguientes istrucciones: INSERT UPDATE, DELETE.
Al interior del desencadenador se generan 2 tablas temporales:
-INSERTED: Se crea cuando en la tabla se define un desencadenador para la
instuccion:INSERT o UPDATE

-DELETED:Se crea cuando en la tabla se defne un desencadenador para la


instruccion;UPDATE O DELETE

Estas tabla spueden servir como parametros al desencadenador.

Creacion:
sintaxis:
Create trigger <nombre_desencaednador> on <nombre_tabla>
for(este for es despues) | INSTEAD(este es antes) OF INSERT[,UPDATE,DELETE]
as
<instruccio(es)>

Modificacion:
sintaxis:
Alter trigger <nombre_desencadenador> on <nombre_tabla>
for| INSERTEAD OF INSERT[, UPDATE, DELETE]
as
<instruccio(es)>

Eliminacion:
sintaxis:
Drop trigger <nombre_trgger>

Activacion/Desactivacion trigger:
sintaxz:
Alter table <nombre_tabla>
Enable| disable trigger <nombe_trigger>

VISUALIZAR Desencadenadores de tabla:


sintaxs:
sp_helptrigger <nombre_tabla>

use CARTERA16

/*crear un desencadenador que al adicionar un cliente, emita un mensaje


que asi lo indique*/

alter trigger tg_AddCliente on cliente


for insert
as
--mostrar el contenido de la tabla temporal inserted
select * from inserted
print ' cliente Adicionado Correctamente'
para visualizar
sp_helptrigger cliente
--agregar un cliente( se ejecuta desencdenadores)
insert into cliente values('089','Almacen la polla','kra 80#44-
88','4829280',25000000)
select * from cliente

/*crear un desencadenador que al adicionar un cliente, emita un mensaje


que asi lo indique que diga s existe*/
alter trigger tg_Addcliente2 on cliente
instead of insert
as
--validar que el cliene no exista
if exists(select nitocc from cliente where nitocc in(select nitocc from inserted))
print 'nitocc de cliente existencal'
else
begin
insert into cliente select * from inserted
print 'cleinte adicionado crrectamente'
end

insert into cliente values('0829','Almacen la polla','kra 80#44-


88','4829280',25000000)

/*crear un desencadenador de manera que al borrar


un cliente se eliminen todas sus facturas y todos los abonos de sus facturas*/
select * from factura
select * from abono
select * from cliente

alter trigger tg_ElminarCliente on cliente


instead of delete
as
--buscar el cliente a traves del (nitocc)
if exists(select nitocc from cliente where nitocc in(select nitocc from deleted))
--buscar el cliente en la tabla factura
if exists(select nitocc from factura where nitocc in(select nitocc from deleted))
begin
delete from cliente where nitocc in(select nitocc from deleted)
delete from factura where nitocc in(select nitocc from deleted)
end
else
print ' El cliente no tiene facturas'
else
print 'cliente no existe'

--eliminar abonos
create trigger tg_EliminarAbonos on factura
for delete
as
delete from abono where nrofact in(select nrofact from deleted)

--prueba de los anteriores desencadenadores


delete from cliente where nitocc='90000000'
--crear un desencadenador de manera que borre un cliente si no posee facturas
create trigger td_ElimnarCliente on cliente
instead of delete
as
if exists(select nitocc from factura were nitocc in(select nitocc from deleted))
printm 'este cliente posee facturas'
else
delete from cliente where nitocc in(select nitocc from deleted)

/*crear un desencadenaddor de manera que al cambar el nitocc de un


cliente, tambien se cambie en la tabla factura*/
select * from CLIENTE
select * from FACTURA
alter trigger tg_ActNitocc on cliente
instead of update
as
--buscar el nitocc en la tabla cliente
if exists(select nitocc from CLIENTE where NITOCC in
(select NITOCC from inserted))
begin
declare @nit nvarchar(12)
set @nit=(select nitocc from inserted)
print 'el nitocc: '+@nit+' ya existe'
end
else
begin
update CLIENTE set NITOCC=(select NITOCC from inserted) where NITOCC in(select
NITOCC from deleted)
update FACTURA set NITOCC=(select NITOCC from inserted) where NITOCC in(select
NITOCC from deleted)
end

update cliente set nitocc='71000000' where nitocc='71000000'


update cliente set nitocc='9999' where nitocc='90000000'

/*crear un desencadenador de manera que al realizar un abono, a una factura,


se disminuya el saldo de la factura, con base en el valor abono*/
create trigger tg_AbonoxFactura on abono
instead of insert
as
--verificar que valorabono no exeda del valorsaldo de la factura
if(select valorabono from inserted)<=
(select vlrsaldo from factura where nrofact in(select nrofact from inserted))
begin
insert into abono select * from inserted
update factura set vlrsaldo=vlrsaldo-(select valorabono from inserted) where
nrofact in(select nrofact from inserted)
end
else
begin
declare @saldo int
set @saldo=(select vlrsaldo from factura where nrofact in
(select nrofact from inserted))
print 'el valor abono maximo es: '+ltrim(str(@saldo,7,0))
end

insert into abono values('8896','100','20100606',3100000)


select * from abono
select * from factura

S-ar putea să vă placă și