Trigger

18/05/2005 - 12:41 por David Ruiz | Informe spam
Hola a todos,

Tengo un problemilla con un trigger de actualizacion.

Solo se lanza cuando se hace un update a un solo registro de la tabla,
cuando es un update que afecta a mas, no se lanza.

Este es el codigo:

CREATE TRIGGER tgu_agentesobra
ON dbo.agentesobra
FOR UPDATE
AS
declare @ter_terid int
declare @ob_numobraid int
declare @comision char(1)

begin

select @ter_terid=ter_terid, @ob_numobraid=ob_numobraid, @comision=comision
from inserted

if update(ter_terid) and @comision='S'
update dbo.coExpNeg
set IdAgente=@ter_terid
where IdObra=@ob_numobraid
END


Trabajo con SQL Server 2000 Ent. bajo W2003 Server.

Gracias de antemano!!

Preguntas similare

Leer las respuestas

#1 poker
18/05/2005 - 12:48 | Informe spam
Sí se lanza, pero ¿ qué crees que hace tu código cuando ejecutas el
siguiente select y en "inserted" hay más de una fila?¿qué valores de qué
registro va a asignar a tus variables?

Mostrar la cita
esto no funciona ni dentro ni fuera de un trigger. Prueba de otra forma.
Ten en cuenta que el trigger se dispara una unica vez aunque tú modifiques
muchas filas.



"David Ruiz" escribió en el mensaje
news:
Mostrar la cita
#2 David Ruiz
18/05/2005 - 13:02 | Informe spam
Tenia entendido que el trigger se lanza una vez por cada registro modificado,
no una sola vez por tabla.

Y si el trigger mefunciona para un solo registro, ¿porque no dices que no
funciona ese codigo?


Gracias

"poker" escribió:

Mostrar la cita
#3 Ricardo Passians
18/05/2005 - 13:41 | Informe spam
En sql server todo debes verlo en función de conjuntos y no de registros
individuales. Por tanto debes considerar que la tabla INSERTED ( y la
DELETED) pueden tener varios registros.

Elimina el select y prueba cambiando tu update a algo asi:

if update(ter_terid)
update coExpNeg
set IdAgente=I.ter_terid
from coExpNeg inner join INSERTED I
on coExpNeg.IdObra=I.ob_numobraid and I.comision='S'





Mostrar la cita
@comision=comision
Mostrar la cita
#4 Maxi
18/05/2005 - 22:18 | Informe spam
Hola, como te han dicho los amigos, los triggers se disparan por accion y no
por registro o tabla, o sea si haces un insert solo se dispara una vez si
haces 100 insert se disparara 100 veces. Por esto los triggers disponen de 2
tablas virtuales llamadas INSERTED - DELETED.


Salu2
Maxi


"David Ruiz" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida