纯 sql 无限级 树形结构 生成 和 判断

本文介绍了一种在SQL中实现树形结构生成的方法,通过存储过程处理数据的插入,并维护节点之间的层级关系。

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

以前树形生成都是在程序里面处理的,现在想在sql里面处理,花了2个小时做出来的.需要转载的朋友请注明出处.

至于树形结构的加载请浏览我前面的文章,里面都说的很详细了

 SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER  proc STKD_Ys_Ysxm_Insert
@编号 varchar(255),
@名称 varchar(255),
@对应科目 int,
@余额方向 bit,
@是否现金流 bit,
@备注 varchar(255),
@用户ID int,
@明细 bit,
@结果 varchar(255) output
as
declare @位置 int,@级数 int,@编号_ varchar(255),@父级编号 varchar(255),@父级ID int,@重复判断 int
select @重复判断=count(*) from STKD_Ys_Ysxm where @编号=FNumber
if @重复判断<1
begin

 if left(@编号,1)<>'.' and right(@编号,1)<>'.'
 begin
  set @级数=len(@编号)-len(replace(@编号,'.',''))+1
  set @编号_=reverse(@编号)
  set @位置 = patindex('%.%', @编号_)
  set @父级编号 = substring(@编号_,@位置+1, len(@编号_))
  set @父级编号=reverse(@父级编号)
  select @父级ID=fid from STKD_Ys_Ysxm where fnumber=@父级编号
  if @父级编号=@编号
  set  @父级ID=0
  if @父级ID is not null
  begin
  begin tran 
  insert into STKD_Ys_Ysxm(FParentID,FDetail,FLevel,FNumber,FName,FAccountID,FDC,FXjll,FExplanation,FUserID,FDate)
  values(@父级ID,@明细,@级数,@编号,@名称,@对应科目,@余额方向,@是否现金流,@备注,@用户ID,getdate())
   if @@error<>0
   begin
   rollback transaction
   set @结果='此次操作失败!'
   end
   else
   set @结果='此次操作成功!'
   commit tran
  end
  else
  set @结果='上级组不存在!'
 end
 else
 set @结果='编号格式错误!'
end
else
set @结果='该编号已经存在!'

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值