Eu tenho uma tabela de estoque e uma tabela PurchaseOrder. Estoque e Pedido de Compra são relações muitos para um. Um exemplo como abaixo.
Stock table AS ST
POId | ItemId | Quantity | Amount | TaxedAmount
A | Pen | 10 | 20 |
A | Pen | 15 | 30 |
PurchaseOrder table AS PO
POId | ItemId | Quantity | TaxPrice
A | Pen | 25 | 2.1
Agora preciso de TaxedAmount = PO.TaxPrice * ST.Quantity Mas quando tento fazer isso, cada registro na tabela Stock foi atualizado duas vezes. Portanto, o TaxedAmount é sempre o mesmo.
UPDATE Stock
SET
Stock.TaxedAmount = PurchaseOrder.TaxPrice * Stock.Quantity
FROM
Stock, PurchaseOrder
WHERE
Stock.POId = PurchaseOrder.POId
AND Stock.ItemId = PurchaseOrder.ItemId
SQLServer retorna
2 registros afetados. 2 registros afetados.
A tabela é atualizada conforme abaixo, onde os TaxedAmounts são iguais.
Stock table AS ST
POId | ItemId | Quantity | Amount | TaxedAmount
A | Pen | 10 | 20 | 31.5
A | Pen | 15 | 30 | 31.5
No entanto, os resultados esperados são:
Stock table AS ST
POId | ItemId | Quantity | Amount | TaxedAmount
A | Pen | 10 | 20 | 21
A | Pen | 15 | 30 | 31.5
Alguma idéia de como devo fazer a atualização funcionar corretamente? Obrigado.
Responder1
A causa raiz foi identificada. Foi habilitado outro gatilho de atualização, que utiliza outra fonte para atualizar o TaxedAmount, o que está incorreto. Atualizei o gatilho e o problema foi resolvido.