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?

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



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:
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!!


Respuesta Responder a este mensaje
#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ó:

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?

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

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:
> 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!!
>
>



Respuesta Responder a este mensaje
#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'






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!!


Respuesta Responder a este mensaje
#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:
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ó:

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?

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

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:
> 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!!
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida