Ich habe eine Bestandstabelle und eine Bestelltabelle. Bestand und Bestelltabelle stehen in einer Viele-zu-eins-Beziehung. Ein Beispiel wie unten.
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
Jetzt brauche ich TaxedAmount = PO.TaxPrice * ST.Quantity. Aber wenn ich das versuche, wird jeder einzelne Datensatz in der Stock-Tabelle zweimal aktualisiert. Der TaxedAmount ist also immer derselbe.
UPDATE Stock
SET
Stock.TaxedAmount = PurchaseOrder.TaxPrice * Stock.Quantity
FROM
Stock, PurchaseOrder
WHERE
Stock.POId = PurchaseOrder.POId
AND Stock.ItemId = PurchaseOrder.ItemId
SQLServer gibt zurück
2 Datensätze betroffen. 2 Datensätze betroffen.
Die Tabelle wird wie unten aktualisiert, wobei die besteuerten Beträge gleich bleiben.
Stock table AS ST
POId | ItemId | Quantity | Amount | TaxedAmount
A | Pen | 10 | 20 | 31.5
A | Pen | 15 | 30 | 31.5
Die erwarteten Ergebnisse sind jedoch:
Stock table AS ST
POId | ItemId | Quantity | Amount | TaxedAmount
A | Pen | 10 | 20 | 21
A | Pen | 15 | 30 | 31.5
Irgendwelche Ideen, wie ich das Update richtig zum Laufen bringen kann? Danke.
Antwort1
Die Grundursache wurde identifiziert. Ein anderer Update-Trigger wurde aktiviert, der eine andere Quelle zum Aktualisieren des TaxedAmount verwendet, was falsch ist. Ich habe den Trigger aktualisiert und das Problem wurde behoben.