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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 Gabriel
04/02/2004 - 21:52 | Informe spam
Gracias por contestar Maximiliano
lo voy entendiendo mejor no entiendo bien lo de

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



Si modifico una linia de factura solo puedo modificar de una en una , creo
Si solo pusiera la segunda parte la Multi
Select SUM(
Tambien me funcionaria siempre , que diferencia abria ?

De nuevo Gracias



"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:#EgE#
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
>
>


Respuesta Responder a este mensaje
#3 ulises
05/02/2004 - 20:15 | Informe spam
Hola Gabriel,

Con permiso de Maxi (espero que hayas disfrutado de tus
vacaciones :) ), como te has dado cuenta el trigger se
invoca una sola vez al final de todas las actualizaciones
en la tabla, centrándonos en tu caso: si sólo empleases la
segunda parte que incluye el SUM funcionaría correctamente
el trigger, la razón de separarlo (según entiendo) es
optimizar el rendimiento de este trigger cuando solo se
actualice un registro que deben ser la mayor parte de las
operaciones de actualización que se realicen.

Saludos,
Ulises

Gracias por contestar Maximiliano
lo voy entendiendo mejor no entiendo bien lo de

como veras ese trigger esta pensado para actuar cuando


haces una
actualizacion de un solo registro o de varios



Si modifico una linia de factura solo puedo modificar de


una en una , creo
Si solo pusiera la segunda parte la Multi
Select SUM(
Tambien me funcionaria siempre , que diferencia abria ?

De nuevo Gracias



"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]


ar> escribió en el
mensaje news:#EgE#
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
>
>






.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida