• I finally decided to use CTE in this trigger after reading Sql Documentation and googling:

    CREATE TRIGGER [trUpdateOrderTotal]

    ON [dbo].[OrderDetail]

    FOR DELETE, INSERT, UPDATE

    AS

    BEGIN

    Declare @evt Int = 0;

    SET NOCOUNT ON

    IF(EXISTS(SELECT * FROM inserted))

    Set @evt = @evt + 1;

    IF(EXISTS(SELECT * FROM deleted))

    Set @evt = @evt + 2;

    IF(@Evt = 1) -- inserted

    begin

    With SubTotal(OrderID, SubTotal) As

    (

    SELECT OD.OrderID, SUM(COALESCE(OD.Total, 0)) As SubTotal FROM OrderDetail OD

    WHERE OD.OrderID IN (SELECT Distinct(OrderID) From inserted)

    GROUP BY OD.OrderID

    )

    UPDATE O SET O.OrderTotal = S.SubTotal

    FROM [Order] O JOIN SubTotal S ON S.OrderID = O.OrderID

    end

    if(@Evt = 2) -- deleted

    begin

    With SubTotal(OrderID, SubTotal) As

    (

    SELECT OD.OrderID, SUM(COALESCE(OD.Total, 0)) As SubTotal FROM OrderDetail OD

    WHERE OD.OrderID IN (SELECT Distinct(OrderID) From deleted)

    GROUP BY OD.OrderID

    )

    UPDATE O SET O.OrderTotal = S.SubTotal

    FROM [Order] O JOIN SubTotal S ON S.OrderID = O.OrderID

    end

    if(@Evt = 3) -- updated

    begin

    With SubTotal(OrderID, SubTotal) As

    (

    SELECT OD.OrderID, SUM(COALESCE(OD.Total, 0)) As SubTotal FROM OrderDetail OD

    WHERE OD.OrderID IN (SELECT Distinct(OrderID) From inserted WHERE COLUMNS_UPDATED(Total) = 1)

    GROUP BY OD.OrderID

    )

    UPDATE O SET O.OrderTotal = S.SubTotal

    FROM [Order] O JOIN SubTotal S ON S.OrderID = O.OrderID

    end

    END