SQLServer - 多対一の更新 - 「多」を更新すると、行は複数回更新されますか?

SQLServer - 多対一の更新 - 「多」を更新すると、行は複数回更新されますか?

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 を更新していますが、これは正しくありません。トリガーを更新したところ、問題は解決しました。

関連情報