以前树形生成都是在程序里面处理的,现在想在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