SQL查询多级节点方法

设计资料表中的字段必须有的ID和ParentID 他们的关系是自身引用。

下面以 TableName(ID INT,ParentID INT) 表来做事例

 

  
  
  
  
  1. IF object_id('rTableNameByParentID'IS NOT NULL 
  2.     DROP PROCEDURE rTableNameByParentID  
  3. GO  
  4. CREATE PROCEDURE rTableNameByParentID  
  5. @ParentID int ,  
  6. @HasParent bit =0  
  7. AS 
  8. BEGIN 
  9.  
  10.     SET NOCOUNT ON 
  11.  
  12.     DECLARE @TypeID TABLE(ID INT)  
  13.  
  14.     ;With CTE_TableNameID AS 
  15.     (  
  16.         SELECT ID FROM TableName WHERE  ParentID=@ParentID   
  17.         UNION ALL 
  18.         SELECT a.ID FROM (SELECT *FROM TableName ) AS a INNER JOIN CTE_TableNameID AS b ON a.ParentID=b.ID    
  19.     )  
  20.  
  21.     INSERT INTO @TypeID SELECT ID FROM CTE_TableNameID   
  22.    
  23.     IF (@HasParent<>0)  
  24.     BEGIN   
  25.         INSERT INTO @TypeID SELECT ID FROM TableName WHERE ID=@ParentID    
  26.     END 
  27.    
  28.     SELECT ID,ParentID FROM TableName WHERE ID IN(SELECT ID FROM @TypeID)    
  29. END 

 

你可能感兴趣的:(sql查询,多级查询,SQL查询多级节点方法,多级节点查询)