I want a list of all the PKs in either inserted or deleted - its for an INSERT, UPDATE, DELETE trigger than needs to "worry" about changes in Quantity on order itemsWhich of these do you prefer?INSERT INTO @tblUpdatedOrders( T_OrderID, T_ItemNo)SELECT DISTINCT -- (1) [T_OrderID] = COALESCE(I.OrderID, D.OrderID) [T_ItemNo] = COALESCE(I.ItemNo, D.ItemNo)FROM inserted I FULL OUTER JOIN deleted D ON D.OrderID = I.OrderID AND D.ItemNo = I.ItemNo
(1) - is the DISTINCT redundant because of the FULL OUTER JOIN?orINSERT INTO @tblUpdatedOrders( T_OrderID, T_ItemNo)SELECT [T_OrderID] = OrderID, [T_ItemNo] = ItemNoFROM insertedUNION -- Removal of Duplicates is REQUIREDSELECT [T_OrderID] = OrderID, [T_ItemNo] = ItemNoFROM deleted
the intention is that the temporary table is then used to update, say, the Stock Level (in practice we need to update some other tables too):UPDATE USET -- Calculated Stock Level adjustment from Order Items [QtyOnHand] = COALESCE(QtyOnHand, 0) + COALESCE(I.Qty, 0) - COALESCE(D.Qty, 0)FROM @tblUpdatedOrders -- (2) JOIN dbo.OrderItem AS OI ON OI.OrderID = T_OrderID AND OI.ItemNo = T_ItemNo JOIN dbo.StockLevel AS U ON U.ProductCode = OI.ProductCode LEFT OUTER JOIN deleted D ON D.OrderID = T_OrderID AND D.ItemNo = T_ItemNo LEFT OUTER JOIN inserted I ON I.OrderID = T_OrderID AND I.ItemNo = T_ItemNo-- Only update if the Qty has changedWHERE COALESCE(I.Qty, 0) <> COALESCE(D.Qty, 0)
(2) Would I be better off just using a nested sub-query here? If so Version-1 or Version-2?ThanksKristen