设计资料表中的字段必须有的ID和ParentID 他们的关系是自身引用。
常用的两种方法:
1.节点函数
while @@ROWCOUNT > 0
begin
set @level = @level 1
insert into @t_level select @id , @level
from Article_Type a , @t_Level b
where a.ParentID = b.id and b.level = @level - 1
end
return
end
go
调用
2.存储过程方式
SET NOCOUNT ON
DECLARE @TypeID TABLE(ID INT)
;With CTE_Article_TypeID AS
(
SELECT ID FROM Article_Type WHERE ParentID=@ParentID AND Effectiveness=1
UNION ALL
SELECT a.ID FROM (SELECT *FROM Article_Type WHERE Effectiveness=1) AS a INNER JOIN CTE_Article_TypeID AS b ON a.ParentID=b.ID
)
INSERT INTO @TypeID SELECT ID FROM CTE_Article_TypeID
IF (@HasParent<>0)
BEGIN
INSERT INTO @TypeID SELECT ID FROM Article_Type WHERE ID=@ParentID AND Effectiveness=1
END
SELECT ID,Name,ParentID,Seq,Effectiveness FROM Article_Type WHERE ID IN(SELECT ID FROM @TypeID) ORDER BY ParentID ,SEQ
END
这两种方法比较下第二种方法是比教灵活的