sql 根据父节点查找所有子节点

本文介绍了一个SQL递归函数f_id,用于根据输入的父ID获取所有子级节点及其层级信息。该函数通过自连接的方式实现了对层级数据模型的遍历,并展示了如何结合此函数查询特定类别下的产品详情。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER   function   f_id(@parentid  int)  
  returns   @re   table(orderid   int,parentid   int,title   nvarchar(50),level   int)  
  as  
  begin  
  declare   @l   int  
  set   @l=0  
  insert @re select @parentid,null,'',-1
  insert   @re   select   TabID,   ParentTabID   ,TabName,@l   from   rb_Tabs  
  where   ParentTabID=@parentid   
  while   @@rowcount>0  
  begin  
  set   @l=@l+1  
                  insert   into   @re   select    
                  a.TabID,a.ParentTabID,a.TabName,@l  
                  from   rb_Tabs   a,@re   b  
                  where   a.ParentTabID=b.orderid   and   b.level=@l-1   
  end  
  return  
  end  
  go  
--------------------------------------------------------------
使用方法

declare @cat int
set @cat  = 406
SELECT
       rb_Products_st.ProductID,
   rb_Products_st.DisplayOrder,
   rb_Products_st.ModelNumber,
   rb_Products_st.ModelName,
   rb_Products_st.UnitPrice,
   rb_Products_st.FeaturedItem,
   rb_Products_st.LongDescription,
   rb_Products_st.ShortDescription,
   rb_Products_st.MetadataXml,
   rb_Products_st.Weight,
   rb_Products_st.TaxRate
  FROM
   rb_Products_st
  WHERE
      rb_Products_st.CategoryID in (select   orderid   from   dbo.f_id(@cat) )

转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/05/31/1492970.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值