上级要求是:[b]要用递归形式写一下存储过程[/b,对分类表Class_Table中的分类进行删除,若分类下有子分类或本分类下有文章存在,则不能删除,如果没有则直接删除
    我是想这样做,但不知如何实现, ,不过在坐高手如有好的方法,可以留下意见了。以下为我的想法:
    写一下存储过程,完成根据Class_Table表的数据生成一个treeview.生成TreeView后点击节点进行删除,若该节点下有数据,则不能删除,提示"有文章不能删除“否则将该节点删除,并且数据库里的数据也要删除。   
这是我数据库中的数据设计:
类型表 Class_Table      
    主键ID        父级ID          类型名           状态(表是该类型是否删除1/0)
      Class_ID   Class_ParentID   Class_Name               Class_State
        1           0                电脑                         1
        2           1                硬件                         1
        3           1                软件                         1
        4           2                CPU                      1
        5           2                内存                         1
        6           3                Word                     1
        7           3                Excel                    1

解决方案 »

  1.   

    select *,case when exists(select top 1 1 from Class_Table t1 where t1.Class_ParentID=t.Class_ID) then 1 else 0 end as Flag 
    from Class_Table t where Class_ParentID=@ParentID当Flag 为1 有子节点提示不能删除,0时没有可以删除地下有文章类同
      

  2.   

    若分类下有子分类或本分类下有文章存在,则不能删除,如果没有则直接删除 这个不需要递归删除哦  直接判断就行了,比如删除硬件这记录
    if exists(select 1 from 表 where 父级ID =2)
    raiserror 50005 N'不能删除!'
    else 
    --没子记录,删除这条就行了
    delete 表 where 主键ID =2 
      

  3.   

    if object_id('dom') is not null
    drop table dom
    go
    create table dom(id int,name varchar(50),parentid int,Level int)
    insert into dom select 1,'河北省',null,1
    insert into dom select 2,'秦皇岛市',1,2
    insert into dom select 3,'山海关区',2,3
    insert into dom select 4,'海港区',2,3
    insert into dom select 5,'北京',null,1
    insert into dom select 6,'海淀',5,2
    insert into dom select 7,'朝阳',5,2go
    if object_id('proc_delete_tb') is not null
    drop proc proc_delete_tb
    go
    create proc proc_delete_tb
    @id int
    as
    begin
    delete dom where id = @id
    while @@rowcount > 0
    delete dom where parentid not in(select id from dom) and parentid is not null
    end
    godeclare @id int
    set @id=1 --要删除的id
    exec proc_delete_tb @id select * from dom递归的删除
      

  4.   

    同意: select *,case when exists(select top 1 1 from Class_Table t1 where t1.Class_ParentID=t.Class_ID) then 1 else 0 end as Flag 
    from Class_Table t where Class_ParentID=@ParentID 当Flag 为1 有子节点提示不能删除,0时没有可以删除