sqlserver 实现递归

本文介绍了两种SQL递归查询的方法:一是从子节点追溯到顶级父节点;二是从父节点查询所有子节点。提供了具体的SQL函数及递归查询语句,并通过实例展示了如何在SQL中实现这些递归查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   从子节点找到最终的父节点

         

现有表结构如下:
id     pid     title
1       0       这是主题贴
2       1       这是跟贴1
3       2       这是跟贴2
4       3       这是跟贴3
此表的树层次为三四层结构.
要求实现通过传入id值,求最顶层的id值,如传入id=4,得出最顶层id=1的主题贴


解如下:
--创建函数
create function 函数名(@keyno int)
returns int
as
begin
declare @pid int,@tmppid int
set @tmppid = (select [pid] from [表名] where [id] = @keyno)
if (@tmppid=0)
set @pid = (select [id] from [表名] where [id] = @keyno)
else
set @pid = [数据库名].[当前数据库用户].[函数名](@tmppid)
return @pid
end

--调用
SET DATEFIRST 1
SELECT [数据库名].[当前数据库用户].[函数名](参数) as 'aa'

--删除函数
DROP FUNCTION 函数名

原文:http://hi.baidu.com/xxfjqb/blog/item/f69bb8deb61c845fcdbf1a53.html

 2,从父节点查出所有的子节点

     表结构:

   KeyId  ParentId  Name,…………

          1            0          父

          2            1          子

          ………………………………

 

  declare @nvarchar(50) KeyId

     ;//一定要以分号隔开

  with T_shi

      (

 

         select * from T_table where KeyId=@KeyId

         union all

         select a.* from T_table as a, T_shi as b where a.parentId=b.keyId

     )

    select * from T_shi

     有了这个涵数,递归简单吧!

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值