删除无限极分类的sql存储过程(转)

CREATE PROCEDURE [dbo].[Category_Delete]
@CategoryId int
AS
--DELETE [Category]
-- WHERE CategoryId=@CategoryId
 
--DELETE [Category]
-- WHERE FatherId=@CategoryId
 
declare @taba TABLE([tabid] [intNOT NULL)
insert @taba (tabid)
select CategoryId from Category WHERE FatherId=@CategoryId
declare @id int
while(exists(select top 1 * from @taba))--只要还有数据就继续循环
begin
select top 1 @id=tabid from @taba--从变量表中取出一条记录
insert @taba (tabid)--插入父ID等于@id这条记录的子记录
select CategoryId from Category WHERE FatherId=@id
delete from Category where CategoryId=@id--从原表中删除该记录
delete from @taba where tabid=@id--从变量表中删除该记录,因为已取到它的所有子记录不必要了
end
DELETE [Category]
WHERE CategoryId=@CategoryId
posted on 2013-05-27 22:35  davidkam  阅读(204)  评论(0编辑  收藏  举报