sum を update で使用する方法について複数の回答が見つかりましたが、これは正しくありませんでした。
新しい請求書を作成するときに、請求書の行で保管数量を更新したくありません。複数の行で同じ製品を処理するには合計が必要です。編集:ストレージが現在のものですでに更新された後に新しい請求書の行を追加する必要がある場合があるため、問題のない行をマークして新しい行を合計し、ストレージを再度削減する必要があります。
数時間のグーグル検索と多くのテストにより、何とか機能するようになりました:
UPDATE Storage
SET StorageQty = StorageQty-(SELECT SUM (InvoiceQty)
FROM InvoiceRows AS Inv
WHERE Inv.ProductId = Sto.ItemID
AND Inv.InvoiceId = #InvoiceId#)
FROM InvoiceRows, Storage AS Sto
WHERE InvoiceRows.ProductID = Sto.ItemID
AND InvoiceRows.InvoiceId = #InvoiceId#
問題は、それが実際にどのように機能しているのか理解できなくなったことです。Invoicerows.StorageOk IS NULL を where 句に追加して、合計を計算し、まだ更新されていない行だけを更新する必要があります。StorageOk は、複数のアクションを防ぐために行をマークする next 句で 1 に設定されます。