我的知识记录分享

我的知识记录分享

sql2000 查询 所有递归的子节点

2020-8-26 糖果小宝 sql

Declare @s varchar(1000)   
select @s=','+cast(id as varchar(20))+'' from M_Directory where id=5 
 
while  @@rowCount>0   
 
--charindex:返回字符串中指定表达式的起始位置  
  select   @s=@s+','+cast(id as varchar) from M_Directory       
            where charindex(','+cast(id as varchar)+',',@s+',')=0    
   
            and   charindex(','+cast(MainID as varchar)+',',@s+',')>0   
 
 
select * from M_Directory where charindex(','+cast(id as varchar)+',',@s+',')>0 

sql2008查询所有递归的子节点的语句
WITH COMMENT_CTE(id,MainID,name)
AS
(
    --基本语句
    SELECT id,MainID,name FROM M_Directory
    WHERE id = 1
    UNION ALL  --递归语句
    SELECT c.id,c.MainID,c.name FROM M_Directory AS c 
    INNER JOIN COMMENT_CTE AS ce    --递归查询
    ON c.MainID = ce.id
)
SELECT * FROM COMMENT_CTE

发表评论: