Triggers de varios registros

18/09/2003 - 09:15 por Barrish | Informe spam
Hola a todos,

tengo el siguiente trigger en una tabla de detalles de albaranes:


CREATE TRIGGER "DetalleAlbaranes_Delete"
ON dbo.DetalleAlbaranes
FOR DELETE
AS
/* Trigger que controla el número de pares servidos en cada partida */
DECLARE @Pares smallint,
@Pedido varchar(10),
@Folio varchar(10)

select @Pares=Pares FROM deleted
select @Pedido=Pedido FROM deleted
select @Folio=Folio FROM deleted

IF @Pedido<>'' AND @Folio<>'' AND @Pares<>0
UPDATE Pedidos SET ServAlbaran=ServAlbaran - @Pares
WHERE Pedido=@Pedido AND Folio=@Folio


Funciona perfectamente cuando se borran lineas de albaran, pero no cuando se
borra un albaran entero y, por consiguiente todas sus lineas.
Supongo que es porque sólo se activa el trigger una vez en lugar de por
todas las lineas.
Mi pregunta es cómo puedo hacer para recorrer todas las lineas. He visto un
ejemplo en la ayuda, pero no me sirve porque realiza una suma de todas las
lineas en lugar de aplicar el nº de pares por cada linea.

Gracias y un saludo
 

Leer las respuestas

#1 José Raúl Fenollar Martínez
18/09/2003 - 10:07 | Informe spam
Tienes que controlar que en la tabla deleted el count(*) > 1, lo que
signfica que hay varias lineas eliminadas, y despues hacer un cursor sobre
la tabla deleted, para procesar 1 a 1 los registros.



"Barrish" wrote in message
news:O8$
Hola a todos,

tengo el siguiente trigger en una tabla de detalles de albaranes:


CREATE TRIGGER "DetalleAlbaranes_Delete"
ON dbo.DetalleAlbaranes
FOR DELETE
AS
/* Trigger que controla el número de pares servidos en cada partida */
DECLARE @Pares smallint,
@Pedido varchar(10),
@Folio varchar(10)

select @Pares=Pares FROM deleted
select @Pedido=Pedido FROM deleted
select @Folio=Folio FROM deleted

IF @Pedido<>'' AND @Folio<>'' AND @Pares<>0
UPDATE Pedidos SET ServAlbaran=ServAlbaran - @Pares
WHERE Pedido=@Pedido AND Folio=@Folio


Funciona perfectamente cuando se borran lineas de albaran, pero no cuando


se
borra un albaran entero y, por consiguiente todas sus lineas.
Supongo que es porque sólo se activa el trigger una vez en lugar de por
todas las lineas.
Mi pregunta es cómo puedo hacer para recorrer todas las lineas. He visto


un
ejemplo en la ayuda, pero no me sirve porque realiza una suma de todas las
lineas en lugar de aplicar el nº de pares por cada linea.

Gracias y un saludo


Preguntas similares