Ayuda con trigger

28/03/2006 - 21:20 por sharline78 | Informe spam
Hola, ojalá me puedan ayudar con 2 triggers. Necesito uno que me
calcule el importe d una lesión
(campo importe) y el número de sesionesv(campo numsesiones) para una
lesión. El importe se debe obtener como la suma de los importes de las
sesiones cuyo lesion.idlesion=sesion.idlesion y numsesiones si no m
ekivoco sería l número d filas q cumplen q
lesiones.idlesion=sesiones.idlesion e idlesion=@idlesion

Las tablas son:

-campos de la tabla lesiones:
idlesion
fechalesion
moticonsulta
etc.
numsesiones
importe


-campos de la tabla sesiones:
idsesion
idlesion
fecha
etc...
importe

create trigger Importe_Lesion
on sesiones
for insert,update,delete
as
if insert(importe)

if update(importe)

begin
update lesiones
set importe importe + (
select sum(s.importe)
from inserted S
where s.idlesion=lesiones.idlesion and idlesion=@idlesion
)
where exists(
select * from inserted as S
where lesiones.idlesion=S.idlesion and idlesion=@idlesion
)

end


if delete(importe)


create trigger NumSesiones
on sesiones
for insert,update,delete
as
...

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
28/03/2006 - 23:31 | Informe spam
Trata,

update lesiones
set importe = (
select sum(importe)
from sesiones S
where s.idlesion = lesiones.idlesion
)
where exists(
select *
from (select idlesion from inserted union all select idlesion from deleted)
as a
where a.idlesion = lesiones.idlesion
)


AMB


"" wrote:

Hola, ojalá me puedan ayudar con 2 triggers. Necesito uno que me
calcule el importe d una lesión
(campo importe) y el número de sesionesv(campo numsesiones) para una
lesión. El importe se debe obtener como la suma de los importes de las
sesiones cuyo lesion.idlesion=sesion.idlesion y numsesiones si no m
ekivoco sería l número d filas q cumplen q
lesiones.idlesion=sesiones.idlesion e idlesion=@idlesion

Las tablas son:

-campos de la tabla lesiones:
idlesion
fechalesion
moticonsulta
etc.
numsesiones
importe


-campos de la tabla sesiones:
idsesion
idlesion
fecha
etc...
importe

create trigger Importe_Lesion
on sesiones
for insert,update,delete
as
if insert(importe)

if update(importe)

begin
update lesiones
set importe importe + (
select sum(s.importe)
from inserted S
where s.idlesion=lesiones.idlesion and idlesion=@idlesion
)
where exists(
select * from inserted as S
where lesiones.idlesion=S.idlesion and idlesion=@idlesion
)

end


if delete(importe)


create trigger NumSesiones
on sesiones
for insert,update,delete
as



Respuesta Responder a este mensaje
#2 sharline78
29/03/2006 - 10:15 | Informe spam
Gracias, ya lo pruebo y te cuento.
Respuesta Responder a este mensaje
#3 sharline78
29/03/2006 - 10:51 | Informe spam
Muchas gracias, funcionó! :). A ver si m sale el otro, saludos.
Respuesta Responder a este mensaje
#4 sharline78
29/03/2006 - 12:02 | Informe spam
Hola, he hecho el trigger para calcular el número de sesiones(campo
numsesiones) pero no m lo hace. Imagino q esté mal o q no m lo hace pq
no he insertado, actualizado o eliminado ninguna sesión.

CREATE TRIGGER TriggerNumSesiones ON sesiones
FOR INSERT, UPDATE, DELETE
AS
update lesiones
set numsesiones = (
select count(idlesion)
from sesiones S
where s.idlesion = lesiones.idlesion
group by s.idlesion
)
where exists(
select *
from (select idlesion from inserted union all select idlesion from
deleted)
as a
where a.idlesion = lesiones.idlesion
)
Respuesta Responder a este mensaje
#5 Alejandro Mesa
29/03/2006 - 17:06 | Informe spam
No agrupes por s.idlesion

group by s.idlesion



Puedes usar el mismo trigger donde actualizas el importe, solo agrega:

update lesiones
set importe = (
select sum(importe)
from sesiones S
where s.idlesion = lesiones.idlesion
),
numsesiones = (
select count(*)
from sesiones S
where s.idlesion = lesiones.idlesion
)
where exists(
select *
from (select idlesion from inserted union all select idlesion from deleted)
as a
where a.idlesion = lesiones.idlesion
)


AMB

"" wrote:

Hola, he hecho el trigger para calcular el número de sesiones(campo
numsesiones) pero no m lo hace. Imagino q esté mal o q no m lo hace pq
no he insertado, actualizado o eliminado ninguna sesión.

CREATE TRIGGER TriggerNumSesiones ON sesiones
FOR INSERT, UPDATE, DELETE
AS
update lesiones
set numsesiones = (
select count(idlesion)
from sesiones S
where s.idlesion = lesiones.idlesion
group by s.idlesion
)
where exists(
select *
from (select idlesion from inserted union all select idlesion from
deleted)
as a
where a.idlesion = lesiones.idlesion
)


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