如果更新了子帐户,请更新主帐户

时间:2014-08-20 07:24:07

标签: sql triggers financial

我的sql表设计如下:

----      ---------------------- ---     ----  -----
1000      Assets                  0        0
1001      Cash                    0        0    1000
1002      Banks                   0        0    1000
1003      NCB Bank                0        0    1002
1004      NCB NO 123456789523555  0        0    1003
1005      NER Bank                0        0    1002
1006      NER NO 123659888845555  0        0    1005
-----------------------------------------------------

我想如果帐号没有。 1006更新此更改将反映在帐户号码上。 1005并且帐号为1002,帐号为。 1000因为所有这些帐户都相互关联。

帐户号码帐户1006的帐户1005和帐户1005的子帐户以及帐户1002帐户1000的帐户{{1}}

我可以使用触发器执行此操作吗?

1 个答案:

答案 0 :(得分:1)

以下是如何使用递归CTE执行此操作的示例:

if object_id('dbo.Account', 'U') is not null
  drop table dbo.Account
go

create table dbo.Account
(
    AccountID int, 
    AccountDESC varchar(25),
    Balance money,
    DidIChangeFLAG char(1),
    ParentAccountID int
)
go

insert into dbo.Account values 
     (1000,'Assets ', 0, 'N', null)
    ,(1001, 'Cash',  0, 'N', 1000)
    ,(1002, 'Banks', 0, 'N', 1000)
    ,(1003, 'NCB Bank',                0, 'N', 1002)
    ,(1004, 'NCB NO 123456789523555',  0,'N', 1003)
    ,(1005, 'NER Bank',                0, 'N',1002)
    ,(1006, 'NER NO 123659888845555',  0,'N',1005)

go


WITH UpdateAccount (AccountID, ParentAccountID)
as
(
    Select 
        AccountID,
        ParentAccountID 
    from 
        dbo.Account 
    where 
    -->Child account updated that we want to be the starting point for the recursive updates
        AccountID=1006
    union all
    Select 
        a.AccountID, 
        a.ParentAccountID 
    from 
        dbo.Account a 
        join UpdateAccount b on a.AccountID=b.ParentAccountID
)

update a set a.DidIChangeFLAG='Y' 
from 
    dbo.Account a
    join UpdateAccount b on a.AccountID=b.AccountID

Select
    AccountID 
    ,AccountDESC  
    ,Balance  
    ,DidIChangeFLAG  
    ,ParentAccountID  
from 
    dbo.Account