日期:2014-05-18  浏览次数:20395 次

先删除小类 再删除大类的存储过程
表Category字段如下:
CategoryID   int   identity(1,1)   primary   key,               --编号
CategoryName   varchar(20)   not   null,                             --名称
ParentID   int,                                                                       --父类ID
LevelID   int   default   0,                                                     --类级别   0-父类   1-子类
IsDeleted   int   default   0                                                   --是否被删除     0-没有删除       1-已经删除

问题1,求一存储过程:如果有小类则先删除该大类下的小类,然后再删除该大类;如果该大类下没有小类则直接删除大类。
问题2,看别人设计的类别表,id如下:
001   大类1
001001   大类1的小类1
002   大类2
002001   大类2的小类1
002002   大类2的小类2
我想问问,这个id是怎么设计的;SQL语句如何能实现上面的insert效果
这些问题对高手来说可能很简单,但对新手我来说不容易,如果你能解答,小弟我万分感谢。

------解决方案--------------------
只有查询出来删除,应该没有好办法。

至于后面的,是指定格式来定义的。这样的对于数据处理来说,很有好处
------解决方案--------------------
这个id是怎么设计的;SQL语句如何能实现上面的insert效果
----------------------------------------------
用程序生成的
------解决方案--------------------
只有两层关系吗?这样你看看
update Category set IsDeleted = 1
where CategoryID in (select CategoryID from Category
where LevelID = 1 and ParentID = @ID
union select @ID as CategoryID)
没调试,不晓得有问题没,至于那id的设计,也可以按某规则写成一个函数或存储过程插入时调用

------解决方案--------------------
create procdure deleteCategoryID
@in_CategoryID int
as
if exists(select 1 from Category where LevelID = '1 ' and
CategoryID = @in_CategoryID )
begin
update Category set IsDeleted = '1 '
where LevelID = '1 ' and
CategoryID = @in_CategoryID
end
update Category
set IsDeleted = '1 '
where LevelID = '0 ' and
CategoryID = @in_CategoryID

大概思想


------解决方案--------------------

表Category字段如下:
CategoryID int identity(1,1) primary key, --编号
CategoryName varchar(20) not null, --名称
ParentID int, --父类ID
LevelID int default 0, --类级别 0-父类 1-子类 (个人意见;感觉这个字段没什么意义,有父ID的自然就是子类了)
IsDeleted int default 0 --是否被删除 0-没有删除 1-已经删除


1.删除类的存储过程
create Proc Delete_CategoryID(@CategoryID int)
as
Declare @lev int
Declare @T Table(CategoryID int,ParentID int,Lev int)
set @lev=1
insert @T select CategoryID,ParentID,@lev from Category where IsDeleted=0
while @@rowcount> 0
begin
set @lev=@lev+1
insert @T select C.CategoryID,C.ParentID,@lev
from Category C,(select * from @T where Lev=@lev-1) T
where C.CategoryID=T.ParentID and C.IsDeleted=0