2

トリガーについて質問があります

Owner テーブルに、その所有者がレンタルしたすべての伝票の合計レンタル料金を表す TotalRental という列が含まれているとします。テキストに示されているスタイルに従って、次のトリガーのコードを記述します。

a.MarinaSlip テーブルに行を挿入するとき、適切な所有者の合計レンタル料金にレンタル料金を追加します。

ここに私のSQLがあります

CREATE TRIGGER add_rentalfee
ON MarinaSlip
AFTER INSERT
AS 
BEGIN

SET NOCOUNT ON;

UPDATE Owner
SET TotalRental = TotalRental + RentalFee
FROM Owner INNER JOIN MarinaSlip ON Owner.OwnerNum = MarinaSlip.OwnerNum
WHERE owner.OwnerNum = MarinaSlip.OwnerNum

END
GO

あなたがSQLに慣れていないことを伝えることができるように、問題は、行を挿入すると、テーブル内のすべての行が変更され、必要なものだけでなく、何が間違っているのか、どうすれば修正できるのかを説明してください。

4

2 に答える 2

1

挿入された行のみを選択するには、INSERTED テーブルに結合する必要があります。

CREATE TRIGGER add_rentalfee
ON MarinaSlip
AFTER INSERT
AS 
BEGIN

SET NOCOUNT ON;

UPDATE Owner
SET TotalRental = TotalRental + RentalFee
FROM Owner INNER JOIN MarinaSlip ON Owner.OwnerNum = MarinaSlip.OwnerNum
INNER JOIN INSERTED ON owner.OwnerNum = INSERTED.OwnerNum

END
GO

SELECTステートメントをもう少し詳しく調べるとINNER JOIN、 は 2 つのテーブルをリンクしていますが、WHERE句はフィルタリングを行っていません。あなたがサーバーだったら、あなたの声明をどのように読みますか? 所有者番号がマリーナ スリップの所有者番号と一致するすべての行を更新します。

TechNet: 挿入および削除されたテーブルを使用する

于 2013-10-15T06:15:17.293 に答える