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

update de varias filas en un trigger...

Estas en el tema de update de varias filas en un trigger... en el foro de SQL Server en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 18/05/2010, 12:41
 
Fecha de Ingreso: abril-2009
Mensajes: 4
Antigüedad: 15 años
Puntos: 0
update de varias filas en un trigger...

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.
  #2 (permalink)  
Antiguo 18/05/2010, 12:45
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: update de varias filas en un trigger...

Los triggers, no son para lo que tu quieres hacer, de hecho, y no dudo, que en versiones superiores desaparezcan.

Lo debes hacer mediante STORE PROCEDURE combinando con transacciones explicitas (BEGIN TRAN)
  #3 (permalink)  
Antiguo 18/05/2010, 12:51
 
Fecha de Ingreso: julio-2006
Ubicación: En algún lugar de un grán pais
Mensajes: 112
Antigüedad: 17 años, 9 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.
  #4 (permalink)  
Antiguo 18/05/2010, 12:53
 
Fecha de Ingreso: julio-2006
Ubicación: En algún lugar de un grán pais
Mensajes: 112
Antigüedad: 17 años, 9 meses
Puntos: 2
Respuesta: update de varias filas en un trigger...

Por ejemplo este es un trigger mio:

CREATE TRIGGER EvitarAltaClientePosterior ON Cliente FOR INSERT, UPDATE AS DECLARE @DBNAME NVARCHAR(128),
@FechaOperacion smalldatetime,
@nud int,
@clientekey int ,
@fechaalta smalldatetime,
@fechaultmodif smalldatetime,
@fechaultvisita smalldatetime,
@fechaultcompra smalldatetime,
@fechAnteriorvisita smalldatetime,
@fechAnteriorcompra smalldatetime

SET @DBNAME = DB_NAME()
DECLARE csr CURSOR FORWARD_ONLY FOR
select NUD, clientekey, fechaalta, fechaultmodif, fechaultvisita, fechaultcompra from INSERTED
OPEN csr
FETCH NEXT FROM csr INTO @nud, @clientekey, @fechaalta, @fechaultmodif, @fechaultvisita, @fechaultcompra
while @@FETCH_STATUS = 0
BEGIN
select @Fechaoperacion = fechaoperacionliq from configuracion
if @fechaalta > @fechaoperacion
begin
update cliente set fechaalta = @fechaoperacion, fechaultmodif = dateadd(dd, 1, @fechaoperacion) where nud = @nud and clientekey = @clientekey
end
/*ELSE
BEGIN
update cliente set fechaultmodif = dateadd(dd, 1, @fechaoperacion) where nud = @nud and clientekey = @clientekey
END*/
FETCH NEXT FROM csr INTO @nud, @clientekey, @fechaalta, @fechaultmodif, @fechaultvisita, @fechaultcompra
END
CLOSE csr
DEALLOCATE csr
  #5 (permalink)  
Antiguo 18/05/2010, 12:54
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: update de varias filas en un trigger...

Por principio de cuentas, las tablas "INSERTED" y "DELETED", como bien comenta miguel, pueden tener mas de un registro, si yo ejecuto:

UPDATE dbo.HOTEL SET hotel = 1 WHERE ............

Seguro que tu trigger, no funcionara
  #6 (permalink)  
Antiguo 24/05/2010, 16:27
 
Fecha de Ingreso: abril-2009
Mensajes: 4
Antigüedad: 15 años
Puntos: 0
Respuesta: update de varias filas en un trigger...

gracias por contestar. Lo aprecio

Etiquetas: filas, trigger, update
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 06:31.