先删除小类 再删除大类的存储过程
表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