C
cxjlike
Unregistered / Unconfirmed
GUEST, unregistred user!
在自联接的表中,如何实现级联删除?触发器+存储过程?
为了实现无限层树形关系记录,在SQL2000用了自联接表b1:
id upid theLevel theName
1 null 1 a1
2 1 2 a2
3 2 3 a3
4 3 4 a4
....
以上数据如果表现为树形即:
a1 根节点
a2 子节点
a3 子节点....
a4
...
表中,id为主键,upid为外键,theLevel为树的层次 。其中,外键upid与当前表自己的主键id对应。即表b1 实现了自己与自己的一对多关系。
现在想实现级联删除。(先把 所有upid=当前记录.id 的记录,称为当前记录的子记录。如:第一行a1的id=1,第二行a2的upid=1,即a2为a1的子记录)
即:删除 a1时,a1的子记录a2被删除,a2的子记录a3被删除... 这样将这一分支删除完。
这一功能在Access2000中,只需定义表的自联接关系,并将属性设为‘级联删除’即可。但是在sql2000中,自联接表的'级联删除'属性不可用。那在sql2000中应该如何实现上此功能呢?
我试着用触发器:
CREATE TRIGGER b1_tr1 ON [dbo].[b1]
FOR DELETE
AS
declare @Aid int
select @Aid=id from deleted
delete from b1 where upid=@Aid
但是触发器只触发了一次。即,删除a1时,仅a2被删除。但触发器自动删除a2时,(语句delete from mb_DAgroup1 where upid=@Aid)并没有实现再次触发而自动删除a3...
请问:
1.在SQL2000中能不能象Access2000那样,用‘关系’的‘级联删除’属性实现级联删除?如果能,怎样实现?
2.如果不能,用触发器应怎样实现?(或存储过程)
为了实现无限层树形关系记录,在SQL2000用了自联接表b1:
id upid theLevel theName
1 null 1 a1
2 1 2 a2
3 2 3 a3
4 3 4 a4
....
以上数据如果表现为树形即:
a1 根节点
a2 子节点
a3 子节点....
a4
...
表中,id为主键,upid为外键,theLevel为树的层次 。其中,外键upid与当前表自己的主键id对应。即表b1 实现了自己与自己的一对多关系。
现在想实现级联删除。(先把 所有upid=当前记录.id 的记录,称为当前记录的子记录。如:第一行a1的id=1,第二行a2的upid=1,即a2为a1的子记录)
即:删除 a1时,a1的子记录a2被删除,a2的子记录a3被删除... 这样将这一分支删除完。
这一功能在Access2000中,只需定义表的自联接关系,并将属性设为‘级联删除’即可。但是在sql2000中,自联接表的'级联删除'属性不可用。那在sql2000中应该如何实现上此功能呢?
我试着用触发器:
CREATE TRIGGER b1_tr1 ON [dbo].[b1]
FOR DELETE
AS
declare @Aid int
select @Aid=id from deleted
delete from b1 where upid=@Aid
但是触发器只触发了一次。即,删除a1时,仅a2被删除。但触发器自动删除a2时,(语句delete from mb_DAgroup1 where upid=@Aid)并没有实现再次触发而自动删除a3...
请问:
1.在SQL2000中能不能象Access2000那样,用‘关系’的‘级联删除’属性实现级联删除?如果能,怎样实现?
2.如果不能,用触发器应怎样实现?(或存储过程)