Consulta de trigger

04/01/2006 - 14:59 por Leo2000 | Informe spam
Hola, quisiera saber como puedo preguntar en un trigger, que tipo de
operacion estoy realizando? para actualizar una tabla cuando modifique
otra, y como se replica la modificacion ?

Gracias, Leo

CREATE TRIGGER Actualizacion ON dbo.TM
AFTER INSERT, UPDATE, DELETE
AS
begin
update oper2000.dbo.TM set tmid = tmid;
end
begin
insert into oper2000.dbo.TM (tmid,tmdescripcion,tmsimbolo)
select * FROM inserted
end

begin
delete oper2000.dbo.TM
select * FROM deleted
end

Preguntas similare

Leer las respuestas

#1 Maxi
04/01/2006 - 15:16 | Informe spam
Hola leo, lo mejor para mi en estos casos es separar las aguas y hacer un
trigger para cada operacion


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Leo" escribió en el mensaje
news:
Hola, quisiera saber como puedo preguntar en un trigger, que tipo de
operacion estoy realizando? para actualizar una tabla cuando modifique
otra, y como se replica la modificacion ?

Gracias, Leo

CREATE TRIGGER Actualizacion ON dbo.TM
AFTER INSERT, UPDATE, DELETE
AS
begin
update oper2000.dbo.TM set tmid = tmid;
end
begin
insert into oper2000.dbo.TM (tmid,tmdescripcion,tmsimbolo)
select * FROM inserted
end

begin
delete oper2000.dbo.TM
select * FROM deleted
end

Respuesta Responder a este mensaje
#2 Hero
04/01/2006 - 15:17 | Informe spam
LEo

Si te das cuenta, en el comienzo del TRIGGER aparece cuando este se
gatillara.. en caso de INSERT, UPDATE, DELETE

Saludos.



"Leo" escribió en el mensaje
news:
Hola, quisiera saber como puedo preguntar en un trigger, que tipo de
operacion estoy realizando? para actualizar una tabla cuando modifique
otra, y como se replica la modificacion ?

Gracias, Leo

CREATE TRIGGER Actualizacion ON dbo.TM
AFTER INSERT, UPDATE, DELETE
AS
begin
update oper2000.dbo.TM set tmid = tmid;
end
begin
insert into oper2000.dbo.TM (tmid,tmdescripcion,tmsimbolo)
select * FROM inserted
end

begin
delete oper2000.dbo.TM
select * FROM deleted
end

Respuesta Responder a este mensaje
#3 Alejandro Mesa
04/01/2006 - 15:18 | Informe spam
Leo,

Una forma sencilla de saber que tipo de operacion ha disparado el trigger,
es creando un trigger por cada operacion (insert, delete, update). Si por el
contrario, deseas que el codigo este en un solo trigger que sera disparado
por cada tipo de operacion, entonces debes chequear las tablas virtuales
"deleted" e "inserted".

insert -> deleted (0 rows)
delete -> inserted (0 rows)
update -> deleted e inserted tendran filas

SQL Server realiza el update en dos pasos, delete e insert. Recuerda que las
operaciones disparan el trigger aunque no hayan afectado ninguna fila.
Puntualizo esto porque la condicion, por ejemplo, de que siempre que la
tabla "deleted" no tenga filas, implique que la operacion fue "insert", no es
correcto.

En cuanto a la pregunta de como se replica la modificacion?, no se ha que te
refieres. Pudieras ser mas explicito con esta pregunta?


AMB

"Leo" wrote:

Hola, quisiera saber como puedo preguntar en un trigger, que tipo de
operacion estoy realizando? para actualizar una tabla cuando modifique
otra, y como se replica la modificacion ?

Gracias, Leo

CREATE TRIGGER Actualizacion ON dbo.TM
AFTER INSERT, UPDATE, DELETE
AS
begin
update oper2000.dbo.TM set tmid = tmid;
end
begin
insert into oper2000.dbo.TM (tmid,tmdescripcion,tmsimbolo)
select * FROM inserted
end

begin
delete oper2000.dbo.TM
select * FROM deleted
end


Respuesta Responder a este mensaje
#4 leonardo200
04/01/2006 - 19:47 | Informe spam
Alejandro,

Gracias por tu respuesta, probe consultar las tablas temporales y ahora no
realiza ninguna de las operaciones, te copio el trigger y podria decir que
puede ser que este mal?

CREATE TRIGGER Actualizar ON dbo.TMOrigen
AFTER INSERT, UPDATE, DELETE
AS
if (select count (* ) from inserted) > 0
begin
update oper200.dbo.TMDestino set tm = tm;
end
if (select count (* ) from deleted) = 0
begin
insert into oper200.dbo.tmDestino (tm,tmdesc,tmsimb)
select * FROM inserted
end
if (select count (* ) from inserted) = 0
begin
delete oper200.dbo.tmDestino
select * FROM deleted
end


Alejandro Mesa wrote:

Leo,

Una forma sencilla de saber que tipo de operacion ha disparado el trigger,
es creando un trigger por cada operacion (insert, delete, update). Si por el
contrario, deseas que el codigo este en un solo trigger que sera disparado
por cada tipo de operacion, entonces debes chequear las tablas virtuales
"deleted" e "inserted".

insert -> deleted (0 rows)
delete -> inserted (0 rows)
update -> deleted e inserted tendran filas

SQL Server realiza el update en dos pasos, delete e insert. Recuerda que las
operaciones disparan el trigger aunque no hayan afectado ninguna fila.
Puntualizo esto porque la condicion, por ejemplo, de que siempre que la
tabla "deleted" no tenga filas, implique que la operacion fue "insert", no


es
correcto.

En cuanto a la pregunta de como se replica la modificacion?, no se ha que te
refieres. Pudieras ser mas explicito con esta pregunta?


AMB

"Leo" wrote:

> Hola, quisiera saber como puedo preguntar en un trigger, que tipo de
> operacion estoy realizando? para actualizar una tabla cuando modifique
> otra, y como se replica la modificacion ?
>
> Gracias, Leo
>
> CREATE TRIGGER Actualizacion ON dbo.TM
> AFTER INSERT, UPDATE, DELETE
> AS
> begin
> update oper2000.dbo.TM set tmid = tmid;
> end
> begin
> insert into oper2000.dbo.TM (tmid,tmdescripcion,tmsimbolo)
> select * FROM inserted
> end
>
> begin
> delete oper2000.dbo.TM
> select * FROM deleted
> end
>
>
Respuesta Responder a este mensaje
#5 Alejandro Mesa
04/01/2006 - 22:30 | Informe spam
Leo,

Por que mejor no nos explicas que tabla quieres actualizar basado en que
operacion sobre que tabla?

Ejemplo:

- Quiero actualizar la columna [tm] de la tabla [TMDestino] con el valor de
la columna [tm] de la tabla [TMOrigen], cada vez que se inserte una fila en
[TMOrigen]
...


AMB


"Leo" wrote:

Alejandro,

Gracias por tu respuesta, probe consultar las tablas temporales y ahora no
realiza ninguna de las operaciones, te copio el trigger y podria decir que
puede ser que este mal?

CREATE TRIGGER Actualizar ON dbo.TMOrigen
AFTER INSERT, UPDATE, DELETE
AS
if (select count (* ) from inserted) > 0
begin
update oper200.dbo.TMDestino set tm = tm;
end
if (select count (* ) from deleted) = 0
begin
insert into oper200.dbo.tmDestino (tm,tmdesc,tmsimb)
select * FROM inserted
end
if (select count (* ) from inserted) = 0
begin
delete oper200.dbo.tmDestino
select * FROM deleted
end


Alejandro Mesa wrote:

> Leo,

> Una forma sencilla de saber que tipo de operacion ha disparado el trigger,
> es creando un trigger por cada operacion (insert, delete, update). Si por el
> contrario, deseas que el codigo este en un solo trigger que sera disparado
> por cada tipo de operacion, entonces debes chequear las tablas virtuales
> "deleted" e "inserted".

> insert -> deleted (0 rows)
> delete -> inserted (0 rows)
> update -> deleted e inserted tendran filas

> SQL Server realiza el update en dos pasos, delete e insert. Recuerda que las
> operaciones disparan el trigger aunque no hayan afectado ninguna fila.
> Puntualizo esto porque la condicion, por ejemplo, de que siempre que la
> tabla "deleted" no tenga filas, implique que la operacion fue "insert", no
es
> correcto.

> En cuanto a la pregunta de como se replica la modificacion?, no se ha que te
> refieres. Pudieras ser mas explicito con esta pregunta?


> AMB

> "Leo" wrote:

> > Hola, quisiera saber como puedo preguntar en un trigger, que tipo de
> > operacion estoy realizando? para actualizar una tabla cuando modifique
> > otra, y como se replica la modificacion ?
> >
> > Gracias, Leo
> >
> > CREATE TRIGGER Actualizacion ON dbo.TM
> > AFTER INSERT, UPDATE, DELETE
> > AS
> > begin
> > update oper2000.dbo.TM set tmid = tmid;
> > end
> > begin
> > insert into oper2000.dbo.TM (tmid,tmdescripcion,tmsimbolo)
> > select * FROM inserted
> > end
> >
> > begin
> > delete oper2000.dbo.TM
> > select * FROM deleted
> > end
> >
> >



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida