查找指定节点的所有子节点的示例函数

-- 查询指定节点及其所有子节点的函数
CREATE   FUNCTION  f_Cid( @ID   char ( 3 ))
RETURNS   @t_Level   TABLE (ID  char ( 3 ), Level   int )
AS
BEGIN
    
DECLARE   @Level   int
    
SET   @Level = 1
    
INSERT   @t_Level   SELECT   @ID , @Level
    
WHILE   @@ROWCOUNT > 0
    
BEGIN
        
SET   @Level = @Level + 1
        
INSERT   @t_Level   SELECT  a.ID, @Level
        
FROM  tb a, @t_Level  b
        
WHERE  a.PID = b.ID
            
AND  b. Level = @Level - 1
    
END
    
RETURN
END
GO

-- 测试数据
CREATE   TABLE  tb(ID  char ( 3 ),PID  char ( 3 ),Name  nvarchar ( 10 ))
INSERT  tb  SELECT   ' 001 ' , NULL  , ' 山东省 '
UNION   ALL   SELECT   ' 002 ' , ' 001 ' , ' 烟台市 '
UNION   ALL   SELECT   ' 004 ' , ' 002 ' , ' 招远市 '
UNION   ALL   SELECT   ' 003 ' , ' 001 ' , ' 青岛市 '
UNION   ALL   SELECT   ' 005 ' , NULL  , ' 四会市 '
UNION   ALL   SELECT   ' 006 ' , ' 005 ' , ' 清远市 '
UNION   ALL   SELECT   ' 007 ' , ' 006 ' , ' 小分市 '
GO

-- 调用函数查询002及其所有子节点
SELECT  a. *
FROM  tb a,f_Cid( ' 002 ' ) b
WHERE  a.ID = b.ID
/* --结果
ID   PID  Name       
------ ------- ---------- 
002  001  烟台市
004  002  招远市
--
*/

转载于:https://www.cnblogs.com/coderlove/archive/2009/04/29/1446381.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值