首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

处理树型数据 马上结

2012-03-27 
处理树型数据 在线等 马上结表treetidtnameparentid1中国02美国03河北14北京15加利福尼亚26海淀区47西城区

处理树型数据 在线等 马上结
表   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
*/

热点排行