我的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}}
我可以使用触发器执行此操作吗?
答案 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