Trigger

04/02/2004 - 20:56 por Gabriel | Informe spam
Hola Foro, vengo de Interbase y el siguiente trigger me funciona pero no lo
entiendo demasiado bien
Aguien me lo podria explicar un poco
sobre todo porque la parte de Single y Multi, no hay suficiente con una
parte
i lo de +ISNULL y -ISNULL tampoco lo entiendo porque no hay suficiente
solo con una parte
Gracias por Adelantado
Gabriel


USE Northwind
GO

CREATE TRIGGER tr_OrderDetails_TotalOrders
ON [Order details]
AFTER INSERT, DELETE, UPDATE
AS

IF @@rowcount = 1


UPDATE Orders
SET SaleTotal = SaleTotal
+ ISNULL(
(SELECT UnitPrice * Quantity * (1 - Discount)
FROM Inserted
WHERE Inserted.OrderID = Orders.OrderID), 0)
- ISNULL(
(SELECT UnitPrice * Quantity * (1 - Discount)
FROM Deleted
WHERE Deleted.OrderID = Orders.OrderID), 0)

ELSE


UPDATE Orders
SET SaleTotal = SaleTotal
+ ISNULL(
(SELECT SUM(UnitPrice * Quantity * (1 - Discount))
FROM Inserted
WHERE Inserted.OrderID = Orders.OrderID), 0)
- ISNULL(
(SELECT SUM(UnitPrice * Quantity * (1 - Discount))
FROM Deleted
WHERE Deleted.OrderID = Orders.OrderID), 0)

GO
 

Leer las respuestas

#1 Maximiliano D. A.
04/02/2004 - 21:03 | Informe spam
Hola,

bueno como veras ese trigger esta pensado para actuar cuando haces una
actualizacion de un solo registro o de varios si?

bien el Isnull lo que hace basicamente es si detecta un nulo en la expresion
(SELECT UnitPrice * Quantity * (1 - Discount)
FROM Deleted
WHERE Deleted.OrderID = Orders.OrderID



que ponga un 0, es porque null no es nada en cambio un 0 si, por lo cual la
funcion matematica en este caso la Resta funcionaria bien, imaginate restar
1 - null? ahi en el trigger restara 1 - 0 y no null, me explico?

Salu2

Maximiliano Damian Accotto


"Gabriel" escribió en el mensaje
news:%
Hola Foro, vengo de Interbase y el siguiente trigger me funciona pero no


lo
entiendo demasiado bien
Aguien me lo podria explicar un poco
sobre todo porque la parte de Single y Multi, no hay suficiente con una
parte
i lo de +ISNULL y -ISNULL tampoco lo entiendo porque no hay suficiente
solo con una parte
Gracias por Adelantado
Gabriel


USE Northwind
GO

CREATE TRIGGER tr_OrderDetails_TotalOrders
ON [Order details]
AFTER INSERT, DELETE, UPDATE
AS

IF @@rowcount = 1


UPDATE Orders
SET SaleTotal = SaleTotal
+ ISNULL(
(SELECT UnitPrice * Quantity * (1 - Discount)
FROM Inserted
WHERE Inserted.OrderID = Orders.OrderID), 0)
- ISNULL(
(SELECT UnitPrice * Quantity * (1 - Discount)
FROM Deleted
WHERE Deleted.OrderID = Orders.OrderID), 0)

ELSE


UPDATE Orders
SET SaleTotal = SaleTotal
+ ISNULL(
(SELECT SUM(UnitPrice * Quantity * (1 - Discount))
FROM Inserted
WHERE Inserted.OrderID = Orders.OrderID), 0)
- ISNULL(
(SELECT SUM(UnitPrice * Quantity * (1 - Discount))
FROM Deleted
WHERE Deleted.OrderID = Orders.OrderID), 0)

GO


Preguntas similares