区域表中有如下字段:ID,Name,ParentID。要求,当删除ID为某一值的数据时,同时删除其所有的下级数据。存储过程如下:
1 CREATE PROCEDURE [dbo].[pro_AreaDelete] 2 @areaid int 3 AS 4 begin 5 set nocount on 6 declare @childID int--声明变量 7 declare cursors cursor local for select AreaID from lh_Area where ParentID=@areaid--local关键字 全局游标 8 open cursors 9 fetch next from cursors into @childID--取游标的值赋给变量 10 while(@@FETCH_STATUS=0)--判断当前游标内是否存在值 11 begin 12 exec pro_AreaDelete @childID--递归调用存储过程 把孩子节点的值赋给游标 递归调用 13 fetch next from cursors into @childID--继续读取游标里面的内容 14 end 15 close cursors 16 deallocate cursors 17 delete from lh_Area where AreaID=@areaid--存储过程执行的删除方法 18 set nocount off 19 end 20 21 GO