Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problemas con un trigger

Estas en el tema de Problemas con un trigger en el foro de SQL Server en Foros del Web. Buenas, estoy intentando crear un trigger update, que cuando actualice un campo se actualice ese mismo campo en las demás tablas que contienen el mismo ...
  #1 (permalink)  
Antiguo 12/05/2012, 10:53
 
Fecha de Ingreso: mayo-2012
Mensajes: 11
Antigüedad: 11 años, 11 meses
Puntos: 0
Problemas con un trigger

Buenas, estoy intentando crear un trigger update, que cuando actualice un campo se actualice ese mismo campo en las demás tablas que contienen el mismo campo.

Es decir, yo tengo 4 tablas, las cuatro disponen de un campo común denominado dorsal. Necesito crear el disparador que cuando actualice el dorsal en una tabla, se actualice automáticamente en el resto de tablas donde aparece ese dorsal.

El trigger se crearlo y demás, pero tengo problemas a la hora de indicar las instrucciones para que se realice el update en el resto de tablas.

Hasta ahora he sido capaz de actualizar por ejemplo ese campo llamado dorsal en dos tablas, yo tengo una tabla ciclista que contiene un numero de dorsal que identifica al corredor, y otra tabla denominada etapa que me indica el ganador de las distintas etapas, pues al cambiar el dorsal en ciclista, me debería de cambiar también en etapa siempre y cuando ese dorsal que estoy cambiando aparezca en esta tabla. Pero lo que hace la consulta es cambiar todos los dorsales que aparecen en la tabla etapa.

Cualquier ayuda será bien venida, estoy bastante confuso.

Un saludo y gracias!!
  #2 (permalink)  
Antiguo 12/05/2012, 14:34
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Problemas con un trigger

Cita:
Iniciado por coper_8888 Ver Mensaje
Buenas, estoy intentando crear un trigger update, que cuando actualice un campo se actualice ese mismo campo en las demás tablas que contienen el mismo campo.

Es decir, yo tengo 4 tablas, las cuatro disponen de un campo común denominado dorsal. Necesito crear el disparador que cuando actualice el dorsal en una tabla, se actualice automáticamente en el resto de tablas donde aparece ese dorsal.

El trigger se crearlo y demás, pero tengo problemas a la hora de indicar las instrucciones para que se realice el update en el resto de tablas.

Hasta ahora he sido capaz de actualizar por ejemplo ese campo llamado dorsal en dos tablas, yo tengo una tabla ciclista que contiene un numero de dorsal que identifica al corredor, y otra tabla denominada etapa que me indica el ganador de las distintas etapas, pues al cambiar el dorsal en ciclista, me debería de cambiar también en etapa siempre y cuando ese dorsal que estoy cambiando aparezca en esta tabla. Pero lo que hace la consulta es cambiar todos los dorsales que aparecen en la tabla etapa.

Cualquier ayuda será bien venida, estoy bastante confuso.

Un saludo y gracias!!
Que tal coper_8888, lo que te está faltando es la condicion en el where del trigger para que realmente te cambie el dorsal de los que realmente existen en la tabla etapas... seria algo como esto:

create trigger dorsales on tabla1,tabla2,tabla3,tabla4 after update as
begin

update tabla1
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal

update tabla2
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal

update tabla3
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal

update tabla4
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal


end

Saludos!
  #3 (permalink)  
Antiguo 14/05/2012, 12:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con un trigger

¿Porque no activar el UPDATE on CASCADE?
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 15/05/2012, 20:31
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Problemas con un trigger

Cita:
Iniciado por iislas Ver Mensaje
¿Porque no activar el UPDATE on CASCADE?
iislas tu solucion seria la mas conveniente para este caso, podrias indicarme como activar el Update en cascada en Sql Server 2008?

Gracias
  #5 (permalink)  
Antiguo 16/05/2012, 15:07
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con un trigger

Revisa esta liga, cualquier otra duda, nos comentas:

http://sqlandme.com/2011/08/08/sql-s...elated-tables/
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 16/05/2012, 15:39
 
Fecha de Ingreso: mayo-2012
Mensajes: 11
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Problemas con un trigger

Gracias por la info, a los 10 minutos de publicar la duda acabé solucionandolo.
Publicaré mañana la solución que he obtenido por si alguien tiene la misma duda, o para comentar que método es mejor, ahora mismo no la tengo en este pc.

Un saludo!!
  #7 (permalink)  
Antiguo 16/05/2012, 16:11
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Problemas con un trigger

Cita:
Iniciado por iislas Ver Mensaje
Revisa esta liga, cualquier otra duda, nos comentas:

[URL]http://sqlandme.com/2011/08/08/sql-server-how-to-cascade-updates-and-deletes-to-related-tables/[/URL]
Gracias por el link iislas, por lo que entendi es como si al actualizar una tabla inmediatamente se disapara una especia de trigger que actualiza otro campo de otra tabla definido por mi...

Mi duda es si es posbiel realizar un update en cascada directamente sin tener que realizar un ALTER TABLE a la tabla en la que lo quiero aplicar, se entiende?
  #8 (permalink)  
Antiguo 16/05/2012, 16:32
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con un trigger

La respuesta tajante seria NO, deberias "Habilitar" el UPDATE ON CASCADE mediante el ALTER TABLE o bien, al momento de crear tu tabla.
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 16/05/2012, 19:25
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Problemas con un trigger

Cita:
Iniciado por iislas Ver Mensaje
La respuesta tajante seria NO, deberias "Habilitar" el UPDATE ON CASCADE mediante el ALTER TABLE o bien, al momento de crear tu tabla.
Gracias iislas, como siempre una excelente rta!
  #10 (permalink)  
Antiguo 10/06/2012, 09:46
 
Fecha de Ingreso: junio-2012
Mensajes: 25
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problemas con un trigger

Hola,

Yo tengo que resolver un problema similar a este, pero no sé como relacionar el trigger con la base de datos con la que tengo que trabajar.

¿Sería en Proyecto > Nuevo elemento > trigger?
  #11 (permalink)  
Antiguo 10/06/2012, 14:43
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Problemas con un trigger

Cita:
Iniciado por jloci88 Ver Mensaje
Hola,

Yo tengo que resolver un problema similar a este, pero no sé como relacionar el trigger con la base de datos con la que tengo que trabajar.

¿Sería en Proyecto > Nuevo elemento > trigger?
Hola jloci88, el trigger lo tenes que relacionar con una tabla en particular sobre la cual se disparará, y es la tabla que está dentro de la base de datos...

deberías hacer esto:


create trigger [nombredeltrigger] on [tabla] after [accion correspondiente]

Espero haberte ayudado

Saludos
  #12 (permalink)  
Antiguo 11/06/2012, 03:48
 
Fecha de Ingreso: junio-2012
Mensajes: 25
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problemas con un trigger

¿Entonces si quiero modificar el mismo campo que se llama dorsal de 4 tablas que se llaman dbo.tabla1, dbo.tabla2, dbo.tabla3 y dbo.tabla4 tendría que hacerlo asi?

create trigger dorsales on dbo.tabla1, dbo, dbo.tabla2, dbo.tabla3, dbo.tabla4 after update as
begin

update dbo.tabla1
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal

update dbo.tabla2
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal

update dbo.tabla3
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal

update dbo.tabla4
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal


end
  #13 (permalink)  
Antiguo 11/06/2012, 07:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un trigger

No no es posible hacer un trigger para varias tablas, lo que tendrias que hacer es que cada tabla tuviera su trigger aqui una liga:

http://alexjimenez.wordpress.com/200...en-sql-server/

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 11/06/2012, 07:36
 
Fecha de Ingreso: junio-2012
Mensajes: 25
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problemas con un trigger

Hola!

Es decir que debería crear un trigger de este tipo para cada una de las tablas?


create trigger dorsales on dbo.tabla1 after update as

begin

update dbo.tabla1
set dorsal = inserted.dorsal
where inserted.dorsal =dorsal

end

De esta forma se actualizaría el dorsal cuando hubiese un cambio?
  #15 (permalink)  
Antiguo 11/06/2012, 09:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con un trigger

asi es necesitas un trigger por cada tabla :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 11/06/2012, 09:27
 
Fecha de Ingreso: junio-2012
Mensajes: 25
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problemas con un trigger

Muchas gracias!!

Etiquetas: tabla, trigger, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:43.