OrderDetail テーブルにある注文情報で Orders テーブルを更新するトリガーを作成しようとしています。詳細テーブルには、注文の複数のアイテムに対して複数の行を含めることができます。これらは OrderID によってリンクされています。私がこれまでに持っているものは次のとおりです。
CREATE TRIGGER AfterOrderDetailInsert ON OrderDetail
AFTER INSERT AS
UPDATE Orders
SET OrderTotal = (
SELECT (
SELECT Sum(orderdetail.quantity * OrderDetail.Price *
( 1.0 -OrderDetail.ItemDiscount / 100.0 )
)
FROM orderdetail
WHERE OrderDetail.OrderId = Orders.OrderId
) *
( 1 - Orders.OrderDiscount / 100.0 ) *
( 1.0 - Orders.CustomerDiscount / 100.0 )
FROM OrderDetail
INNER JOIN Orders on OrderDetail.OrderID=Orders.OrderID
WHERE OrderDetail.OrderID IN (SELECT OrderID FROM Inserted)
)
サブクエリが複数の値を返したというエラーが表示されます。これは単一の合計値を返すだけではいけませんか? UPDATE Orders Set OrderTotal = SUM(SELECT (SELECT OrderTotal Stuff)) になるように SUM を追加しようとしましたが、最初の SELECT の前に構文エラーが発生します。
これは SQL Server 2000 上にあります。
編集:挿入後に ordertotal を更新したいので、クエリを AFTER insert に変更しました
2番目の編集:挿入されたメタテーブルを含めようとしています。これには、最後に挿入された行の注文IDが含まれている必要があり、一度に1行しか挿入されないためです。現在、「キー列情報が不十分であるか正しくありません。更新の影響を受けた行が多すぎます」というエラーが表示されます。注文合計列を見ると、テーブルのすべての行がその注文合計で更新されます。だから私は近いと思いますが、まだ何かが欠けています。