2017-10-29 7 views
1

トランザクションテーブルから勘定残高が自動的に更新されるトリガーを作成しようとしていますが、特定のテーブルを更新できません。私のトリガーは、すべての顧客の口座残高を変更します。私はwhere句を使用して顧客固有のものにする方法を知りたい。ここに私が持っているものがあります:SQLトリガでwhere句を使用するにはどうすればよいですか?

create trigger trig_one 
on dbo.transactions 
for insert, update, delete 
as begin 
    declare @amount int 
    select @amount = (select amount from inserted) 

    update dbo.account set balance = balance + @amount 

end 

私を助けてください。ありがとう!

+0

トランザクションは実際に*更新*され*削除*されますか?通常、取引テーブルを挿入専用にすると、顧客の残高はすべての取引のすべての金額の合計(下位の調整を含む)になります。正の金額の取引が削除されていることに基づいて、顧客の残高を減らさなければならないなど、事態がますます複雑になります。 –

答えて

1

あなたはこのようなクエリを構築:もちろん

update dbo.account 
    set balance = balance + i.amount 
    from dbo.account a join 
     inserted i 
     on i.accountid = a.accountid ; 

(。結合キーが結合キーがあるべきものは何でもある)

、削除のために同じことを行う必要があります。注:これは、複数の行が挿入されている場合に機能します。それは便利です。あなたのバージョンは予期せず失敗します。

関連する問題