2017-12-23 22 views
0

私はまだSQLを学んでおり、トリガーに問題があります。SQL Serverの削除トリガーが更新されていませんテーブル

私は次のコードを持っている:私は、sales表から行を削除した後

CREATE TRIGGER DeleteYTDSales 
ON dbo.Sales 
AFTER DELETE 
AS 
BEGIN 
    UPDATE MasterTable 
    SET MasterTable.SalesYTD = MasterTable.SalesYTD - Deleted.Amount 
    FROM Sales 
    JOIN Deleted ON Sales.CustomerID = Deleted.CustomerID 
END 
GO 

を、私はMasterTableCustomerIDためSalesYTD列を更新する必要があります。今は列を更新しないので、なぜ私は理解できません。

+0

タグあなたの質問:

また、このように書くことができます。 –

+0

'syntax 'と悪名高い' GO'に基づいてsql serverタグを追加しました。 –

答えて

2

MasterTableの結合条件が不足しているためです。あなたはこれを探しています

UPDATE m 
    SET m.SalesYTD = m.SalesYTD - d.Amount 
    FROM MasterTable m 
    JOIN Deleted d ON d.CustomerID = m.CustomerID 
0

あなたのアップデートは本当に奇妙です。私はあなたが単につもりだと思う:

あなたのコードで
UPDATE mt 
    SET SalesYTD = mt.SalesYTD - d.Amount 
    FROM MasterTable mt JOIN 
     Deleted d 
     ON mt.CustomerID = d.CustomerID ; 

、あなたがMasterTableすべての行を更新しています。 SQL ServerはUPDATEでちょっとしたことがあります。私のアドバイスは、FROM句を使用し、常に別名をUPDATEに入れてください。

Salesテーブルを参照する必要はありません。必要な情報はすべてdeletedです。使用しているデータベースとの

UPDATE MasterTable 
    SET SalesYTD = mt.SalesYTD - d.Amount 
    FROM Deleted d 
    WHERE MasterTable.CustomerID = d.CustomerID ; 
関連する問題