Triggers!!!

31/07/2003 - 23:34 por José Trinidad [El Tiko] | Informe spam
Salu2!

Necesito que me ayuden, si tiene un ejemplo mucho mejor!!!, de como
crear un desencadenador de tipo "INSTEAD OF UPDATE" para una tabla de mi
base de datos, la tabla tiene la siguiente estructura:

Terreno_ID Terreno_Area Cliente_ID
Terreno_Trasladado
(Autonumerico) (SmallMoney) (Int) (Bit)

Ok... El campo terreno trasladado generalmente va a estar en 0(false)...
en este caso debe permitir modificaciones, pero si este campo se encuentra
en 1 (true) no debe permitir más modificaciones a este registro... esto con
el afán de mantener la integridad de mis datos... Espero haber sido claro
esta vez! ;-)

Muchas Gracias!!!

Att.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
José Trinidad García M. <El Tiko>
(Guía de buen uso del foro)
http://perso.wanadoo.es/rubenvigon/foro
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Leer las respuestas

#1 Miguel Egea
01/08/2003 - 13:58 | Informe spam
Hola bigsus, los triggers de tipo INSTEAD OF no han grabado todavía, de
hecho es responsabildad del trigger grabar.

Este es un ejemplo de trigger de tipo instead of
use tempdb
go
drop table rel
drop table t
go
create table t(a int not null, b int not null,c int not
null ,constraint pk_claver primary key (a,b))
go
create trigger trg_t on t
instead of insert
as
begin
insert into t select a,b,a+b from inserted
end
go
create unique index un_t on t (c)
go
create table rel (claverel int not null ,texto varchar(10), constraint
fk_relacionar foreign key (claverel) references t(c))
go
insert into t (a,b,c) values (1,2,0)
go
select * from t
go
insert into rel values(1,'esto falla')
go
insert into rel values (3,'esto no')
go
select * from rel

para el caso concreto de nuestro amigo sería algo así

/***** codigo sin probar y sin optimizar .***/

create trigger trg_t on tabla
instead of update,delete
as
begin
if not exists(select * from deleted where Terreno_trasladado<>0)
begin
delete t from tabla t inner join deleted d on t.clave= d.clave
insert into tabla select * from inserted
end
end


Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"BigSus" escribió en el mensaje
news:O5#

"José Trinidad [El Tiko]" escribió en el
mensaje news:
> Salu2!
>
> Necesito que me ayuden, si tiene un ejemplo mucho mejor!!!, de como
> crear un desencadenador de tipo "INSTEAD OF UPDATE" para una tabla de mi
> base de datos, la tabla tiene la siguiente estructura:
>
> Terreno_ID Terreno_Area Cliente_ID
> Terreno_Trasladado
> (Autonumerico) (SmallMoney) (Int)
(Bit)
>
> Ok... El campo terreno trasladado generalmente va a estar en
0(false)...
> en este caso debe permitir modificaciones, pero si este campo se


encuentra
> en 1 (true) no debe permitir más modificaciones a este registro... esto
con
> el afán de mantener la integridad de mis datos... Espero haber sido


claro
> esta vez! ;-)
>
> Muchas Gracias!!!
>
>


Hola.

En sql server primero se guarda el registro (que es lo que tu tienes que
hacer), una vez que este guardado en el trigger puedes preguntar si:
(en el caso de update)
if old_Terreno_Trasladado = 1
then
delete from nombre_tabla where
terreno_id=new_terreno_id
end if


Es una cosa parecida a esa (mas o menos), una vez que esta guardado el
registro lo puedes borrar o modificar dentro del trigger.

Espero que te sirva, si no ya sabes.








Preguntas similares