Trigger con deleted, solo me lo realiza una vez

01/12/2006 - 21:04 por Carlos Gómez | Informe spam
Uso SQLServer Express
Tengo el siguiente trigger (la primera vez que hago un trigger):

CREATE TRIGGER PreSumas_Delete
ON PreSumas
FOR DELETE
AS
UPDATE Sumas SET SumaTotal = SumaTotal-Total
FROM PreSumas INNER JOIN deleted
ON Sumas.Id = deleted.IdPreTickets

Es decir, cuando borra una fila de la tabla PreSumas, el campo Total de
dicha tabla lo resta del
relacionado con la tabla Sumas.

El trigger funciona bien cuando hago por ejemplo:
DELETE FROM PreSumas WHERE Id=4

pero en las masivas:

DELETE FROM PreSumas WHERE Id>4, solo me resta una única vez

Preguntas similare

Leer las respuestas

#1 Maxi
01/12/2006 - 23:00 | Informe spam
Hola, podrias pasarnos las estructuras de las tablas y datos de ejemplo?


Saludos

[Microsoft MVP SQL Server]
www.sqlgurus.org
Buenos Aires - Argentina
"Carlos Gómez" wrote in message
news:
Uso SQLServer Express
Tengo el siguiente trigger (la primera vez que hago un trigger):

CREATE TRIGGER PreSumas_Delete
ON PreSumas
FOR DELETE
AS
UPDATE Sumas SET SumaTotal = SumaTotal-Total
FROM PreSumas INNER JOIN deleted
ON Sumas.Id = deleted.IdPreTickets

Es decir, cuando borra una fila de la tabla PreSumas, el campo Total de
dicha tabla lo resta del
relacionado con la tabla Sumas.

El trigger funciona bien cuando hago por ejemplo:
DELETE FROM PreSumas WHERE Id=4

pero en las masivas:

DELETE FROM PreSumas WHERE Id>4, solo me resta una única vez
Respuesta Responder a este mensaje
#2 Carlos Gómez
02/12/2006 - 09:12 | Informe spam
Alejandro Mesa ha escrito:

Carlos,

Los triggers se ejecutan por cada sentencia que lo dispara y no por cada
fila afectada por la sentencia que lo disparo...



Ahora comprendo el motivo (aunque despues de consultarlo con la
almohada ya me lo estaba imaginando). Toda mi confusión viene de no
haber leido ese detalle en los bol (probablemente se me pasaría)

Muchas gracias por la ayuda
Respuesta Responder a este mensaje
#3 Carlos Gómez
02/12/2006 - 09:16 | Informe spam
Maxi ha escrito:

Hola, podrias pasarnos las estructuras de las tablas y datos de ejemplo?



no puse las estructuras ni nada porque la tabla en si no contiene nada
(es de pruebas)
y ya te puedes imaginar:
Tabla PreSumas:
IdTablaPreSuma int autonumerico
IdTablaSumas int
PreSuma decimal (9,4)

Tabla Sumas
IdTablaSumas int autonumerico
Suma decimal (9,4)

Relacionadas por IdTablaSuma

Muchas gracias por tu interes. De todas formas, Alejandro ya me ha dado
la respuesta y lo más importante, el por qué.

Gracias a ambos
Respuesta Responder a este mensaje
#4 Ricardo Passians
02/12/2006 - 23:43 | Informe spam
Debes imaginar a Deleted e Inserted como tablas (es decir conjuntos) que
pueden tener N registros y no uno solo.

Prueba a ver si te funciona cambiando Deleted por una subquery que agrupe
los registros por IdPreTickets:

CREATE TRIGGER PreSumas_Delete
ON PreSumas
FOR DELETE
AS
UPDATE Sumas SET SumaTotal = SumaTotal- D.Total
FROM Sumas INNER JOIN (Select IdPreTickets, Total=sum(Total) from Deleted
group by IdPreTickets) D
ON Sumas.Id = D.IdPreTickets



Ricardo Passians



"Carlos Gómez" wrote in message
news:
Uso SQLServer Express
Tengo el siguiente trigger (la primera vez que hago un trigger):

CREATE TRIGGER PreSumas_Delete
ON PreSumas
FOR DELETE
AS
UPDATE Sumas SET SumaTotal = SumaTotal-Total
FROM PreSumas INNER JOIN deleted
ON Sumas.Id = deleted.IdPreTickets

Es decir, cuando borra una fila de la tabla PreSumas, el campo Total de
dicha tabla lo resta del
relacionado con la tabla Sumas.

El trigger funciona bien cuando hago por ejemplo:
DELETE FROM PreSumas WHERE Id=4

pero en las masivas:

DELETE FROM PreSumas WHERE Id>4, solo me resta una única vez
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida