Declare@IdInt Set@Id=1---在次修改父节点 Select*Into #TempFrom DbTree Where ParentId In (@Id) Select*Into #AllRow From DbTree Where ParentId In (@Id) --1,2 WhileExists(Select*From #Temp) Begin Select*Into #Temp2 From #Temp TruncateTable #Temp InsertInto #TempSelect*From DbTree Where ParentId In (Select Id From #Temp2) InsertInto #AllRow Select*From #Temp DropTable #Temp2 End Select*From #AllRow OrderBy Id DropTable #Temp DropTable #AllRow
实现方法二: 代码如下:
CreateTable #AllRow ( Id Int, ParentId Int ) Declare@IdInt Set@Id=1---在次修改父节点 Delete #AllRow --顶层自身 InsertInto #AllRow (Id,ParentId) Select@Id, @Id While@@RowCount>0 Begin InsertInto #AllRow (Id,ParentId) Select B.Id,A.Id From #AllRow A,DbTree B Where A.Id = B.ParentId And NotExists (Select Id From #AllRow Where Id = B.Id And ParentId = A.Id) End DeleteFrom #AllRow Where Id =@Id Select*From #AllRow OrderBy Id DropTable #AllRow
Declare@IdInt Set@Id=3; ---在次修改父节点 With RootNodeCTE(Id,ParentId) As ( Select Id,ParentId From DbTree Where ParentId In (@Id) UnionAll Select DbTree.Id,DbTree.ParentId From RootNodeCTE InnerJoin DbTree On RootNodeCTE.Id = DbTree.ParentId ) Select*From RootNodeCTE