Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/05/2010, 12:51
miguelajh
 
Fecha de Ingreso: julio-2006
Ubicación: En algún lugar de un grán pais
Mensajes: 112
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: update de varias filas en un trigger...

Cita:
Iniciado por diego1982stgo Ver Mensaje
Hola, como están?

Mi duda es que tengo un trigger escuchando por un update de una fila en una
tabla, y quiero que al activarse, haga un update en todas las filas correspondientes de la tabla hija.

Tengo por ejemplo, la tabla HOTEL y un detalle HOTEL_SERVICIO,
entonces quiero que cuando se modifique el campo 'estado' en hotel, se
modifiquen los campos de todas las filas que corresponden a ese hotel, en
la tabla de hotel_servicio. Para ello, defini algo como esto:

create trigger actualizar_estado_hotel
on [dbo.HOTEL]

after update

...

update HOTEL_SERVICIO
set hotel= (select estado from inserted)
from hotel_servicio hs join inserted i
on hs.id_hotel = i.id_hotel

Al intentar modificar el campo estado en un hotel, sql server me despliega
el siguiente mensaje de error:

"la subconsulta ha devuelto mas de un valor, lo que no es correcto cuando
va a continuación de =,!=,<,<=,>,>= o cuando se utiliza como expresión.
Se terminó la instruccion"

Hice varias cosas para descartar causas posibles, incluso hice esto:

update HOTEL_SERVICIO
set hotel= (select estado from inserted)

Averiguando en distintos foros, vi que hablaban de hacer que el trigger pudiera
contener varias filas en la tabla "inserted". Pero no estoy seguro de si será
esa la causa, y de cómo hacer eso.

Pues bueno...
La verdad no sé como está el origen de datos, ni la información.
Pero yo siempre en los triggers no asumo que regresa un solo registro modificado, sino que recurro al resultado "inserted" o "deleted" depende de que hagas y recorro esa tabla con un cursor y de ahi ya hago lo que necesito hacer.
Porque si asumes que es un solo registro, te va a tronar.