stock テーブルと PurchaseOrder テーブルがあります。Stock と PurchaseOrder は多対 1 の関係です。以下に例を示します。
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
ここで、TaxedAmount = PO.TaxPrice * ST.Quantity が必要です。しかし、これを実行しようとすると、Stock テーブルのすべてのレコードが 2 回更新されます。そのため、TaxedAmount は常に同じになります。
UPDATE Stock
SET
Stock.TaxedAmount = PurchaseOrder.TaxPrice * Stock.Quantity
FROM
Stock, PurchaseOrder
WHERE
Stock.POId = PurchaseOrder.POId
AND Stock.ItemId = PurchaseOrder.ItemId
SQLServerは戻ります
2 件のレコードが影響を受けました。 2 件のレコードが影響を受けました。
テーブルは以下のように更新され、TaxedAmounts は同じになります。
Stock table AS ST
POId | ItemId | Quantity | Amount | TaxedAmount
A | Pen | 10 | 20 | 31.5
A | Pen | 15 | 30 | 31.5
ただし、期待される結果は次のとおりです。
Stock table AS ST
POId | ItemId | Quantity | Amount | TaxedAmount
A | Pen | 10 | 20 | 21
A | Pen | 15 | 30 | 31.5
アップデートを適切に行うにはどうしたらよいか、何かアイデアはありますか? よろしくお願いします。
答え1
根本原因が特定されました。別の更新トリガーが有効になっており、別のソースを使用して TaxedAmount を更新していますが、これは正しくありません。トリガーを更新したところ、問題は解決しました。