dudas con trigger

26/07/2006 - 11:22 por Alberto González | Informe spam
Buenas a tod@s:

Estoy realizando un trigger pero no me funciona asi que supongo que algo
estoy haciendo mal
tengo 2000 server y sql 2000 server.
El trigger lo que trata es de actualizar una fecha de una tabla de detalles
(lineas) cuando se realiza un cambio en la cabecera


CREATE TRIGGER [CAMBIO FECHAS] ON fapedc
FOR UPDATE
AS
declare @tipcont varchar(1)
declare @fechaant datetime
declare @fechapos datetime
declare @empresa varchar (3)
declare @numped varchar(15)

select @empresa=codemp,@tipcont=tipcont,@fechaant=fecent,@numped=numped from
deleted

select @empresa=codemp, @tipcont=tipcont,@fechapos=fecent,@numped=numped
from inserted
if @fechaant<>@fechapos
update fapedl set fecentlin=@fechaant
where numped= @numped and tipcont=@tipcont and @empresa ='006'

Preguntas similare

Leer las respuestas

#1 Miguel Egea
26/07/2006 - 11:26 | Informe spam
a ver si este link te ayuda a ver lo que estás haciendo mal

http://www.configuracionesintegrale...p?articulo0
Saludos

"Alberto Gonz?lez" wrote in message
news:%
Buenas a :

Estoy realizando un trigger pero no me funciona asi que supongo que algo
estoy haciendo mal
tengo 2000 server y sql 2000 server.
El trigger lo que trata es de actualizar una fecha de una tabla de
detalles (lineas) cuando se realiza un cambio en la cabecera


CREATE TRIGGER [CAMBIO FECHAS] ON fapedc
FOR UPDATE
AS
declare @tipcont varchar(1)
declare @fechaant datetime
declare @fechapos datetime
declare @empresa varchar (3)
declare @numped varchar(15)

select @empresa=codemp,@tipcont=tipcont,@fechaant=fecent,@numped=numped
from deleted

select @empresa=codemp, @tipcont=tipcont,@fechapos=fecent,@numped=numped
from inserted
if @fechaant<>@fechapos
update fapedl set fecentlin=@fechaant
where numped= @numped and tipcont=@tipcont and @empresa ='006'

Respuesta Responder a este mensaje
#2 Antonio Soto
26/07/2006 - 11:28 | Informe spam
Hola Alberto,

Las sentencias en las que recoges los valores de las variables pueden fallar
si modificas varios registros de la tabla. En SQL Server puedes hacer join
directamente en la sentencia update, que es lo que tú necesitas. Échale un
vistazo a un post de ayer titulado "select con update". Te dará una idea de
lo que necesitas
Saludos

Antonio Soto
Solid Quality Learning
http://www.sqlu.com
Disclaimer: This communication is an original work and represents my sole
views on the subject. It does not represent the views of any other person
or entity either by inference or direct reference.
"Alberto González" escribió en el mensaje
news:%
Buenas a :

Estoy realizando un trigger pero no me funciona asi que supongo que algo
estoy haciendo mal
tengo 2000 server y sql 2000 server.
El trigger lo que trata es de actualizar una fecha de una tabla de
detalles (lineas) cuando se realiza un cambio en la cabecera


CREATE TRIGGER [CAMBIO FECHAS] ON fapedc
FOR UPDATE
AS
declare @tipcont varchar(1)
declare @fechaant datetime
declare @fechapos datetime
declare @empresa varchar (3)
declare @numped varchar(15)

select @empresa=codemp,@tipcont=tipcont,@fechaant=fecent,@numped=numped
from deleted

select @empresa=codemp, @tipcont=tipcont,@fechapos=fecent,@numped=numped
from inserted
if @fechaant<>@fechapos
update fapedl set fecentlin=@fechaant
where numped= @numped and tipcont=@tipcont and @empresa ='006'

Respuesta Responder a este mensaje
#3 Alejandro Mesa
26/07/2006 - 17:45 | Informe spam
Trata:

CREATE TRIGGER [CAMBIO FECHAS] ON fapedc
FOR UPDATE
AS
if update (fecent)
begin
update
dbo.fapedl
set
fecentlin = (
select
fecent
from
deleted as d
where
d.numped = dbo.fapedl.numped
and d.tipcont = dbo.fapedl.tipcont
and d.codemp = '006'
)
where
dbo.fapedl.codemp = '006'
and exists (
select
*
from
deleted as d
inner join
inserted as i
on d.numped = i.numped
and d.tipcont = i.tipcont
and d.codemp = i.codemp
where
d.numped = dbo.fapedl.numped
and d.tipcont = dbo.fapedl.tipcont
and d.codemp = '006'
and (d.fecent != i.fecent or (d.fecent is null and i.fecent is not null))
)
end
go


AMB


"Alberto González" wrote:

Buenas a :

Estoy realizando un trigger pero no me funciona asi que supongo que algo
estoy haciendo mal
tengo 2000 server y sql 2000 server.
El trigger lo que trata es de actualizar una fecha de una tabla de detalles
(lineas) cuando se realiza un cambio en la cabecera


CREATE TRIGGER [CAMBIO FECHAS] ON fapedc
FOR UPDATE
AS
declare @tipcont varchar(1)
declare @fechaant datetime
declare @fechapos datetime
declare @empresa varchar (3)
declare @numped varchar(15)

select @empresa=codemp,@tipcont=tipcont,@fechaant=fecent,@numped=numped from
deleted

select @empresa=codemp, @tipcont=tipcont,@fechapos=fecent,@numped=numped
from inserted
if @fechaant<>@fechapos
update fapedl set fecentlin=@fechaant
where numped= @numped and tipcont=@tipcont and @empresa ='006'



Respuesta Responder a este mensaje
#4 eduardo araujo
28/07/2006 - 20:17 | Informe spam
Esto es esactamente lo que quiero. Gracias!
Pero a mi me queda una duda con el codigo

Si el trigger se crea "FOR UPDATE"
es necesario preguntar "if Update" ??
alguna vez puede suceder que el trigger sea activado en un
delete o insert?
CREATE TRIGGER [CAMBIO FECHAS] ON fapedc
FOR UPDATE
AS
if update (fecent)
begin
update
dbo.fapedl
set
fecentlin = (
select
fecent
from
deleted as d
where
d.numped = dbo.fapedl.numped
and d.tipcont = dbo.fapedl.tipcont
and d.codemp = '006'
)
where
dbo.fapedl.codemp = '006'
and exists (
select
*
from
deleted as d
inner join
inserted as i
on d.numped = i.numped
and d.tipcont = i.tipcont
and d.codemp = i.codemp
where
d.numped = dbo.fapedl.numped
and d.tipcont = dbo.fapedl.tipcont
and d.codemp = '006'
and (d.fecent != i.fecent or (d.fecent is null and i.fecent is not null))
)
end
go

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