处理树型数据 在线等 马上结
表 tree
tid tname parentid
1 中国 0
2 美国 0
3 河北 1
4 北京 1
5 加利福尼亚 2
6 海淀区 4
7 西城区 4
8 中关村 6
9 德外大街 7
………………………………
我想写个sql 或者 存储过程 传个 id进去 得到该id下所有的节点
例如
传 0 得到全部
传 1 得到
1 中国 0
3 河北 1
4 北京 1
6 海淀区 4
7 西城区 4
8 中关村 6
9 德外大街 7
传 2 得到
2 美国 0
5 加利福尼亚 2
传 4 得到
4 北京 1
6 海淀区 4
7 西城区 4
8 中关村 6
9 德外大街 7
…………………………
[解决办法]
--建立測試環境
Create Table tree
(tid Int,
tname Nvarchar(20),
parentid Int)
Insert tree Select 1, N '中国 ', 0
Union All Select 2, N '美国 ', 0
Union All Select 3, N '河北 ', 1
Union All Select 4, N '北京 ', 1
Union All Select 5, N '加利福尼亚 ', 2
Union All Select 6, N '海淀区 ', 4
Union All Select 7, N '西城区 ', 4
Union All Select 8, N '中关村 ', 6
Union All Select 9, N '德外大街 ', 7
GO
--建立函數
Create Function GetChildren(@tid Int)
Returns @Tree Table (tid Int, tname Nvarchar(20), parentid Int)
As
Begin
Insert @Tree Select * From tree Where tid = @tid Or parentid = @tid
While @@Rowcount > 0
Insert @Tree Select A.* From tree A Inner Join @Tree B On A.parentid = B.tid And A.tid Not In (Select tid From @Tree)
Return
End
GO
--測試
Select * From dbo.GetChildren(0)
Select * From dbo.GetChildren(1)
Select * From dbo.GetChildren(2)
GO
--刪除測試環境
Drop Table tree
Drop Function GetChildren
--結果
/*
tidtnameparentid
1中国0
2美国0
3河北1
4北京1
5加利福尼亚2
6海淀区4
7西城区4
8中关村6
9德外大街7
tidtnameparentid
1中国0
3河北1
4北京1
6海淀区4
7西城区4
8中关村6
9德外大街7
tidtnameparentid
2美国0
5加利福尼亚2
*/