1、没有为变量@S_sbbm声明长度,导致变量类型默认为varchar(1)
-------------------------------------------------------------------------------------------------------------------
declare @S_sbbm varchar ==> declare @S_sbbm varchar(50)2、以下操作只能获得当前子编码的下一级编码中的一个,即便是能正确执行,也不会将当前自编码的所有下级子编码全部删除掉;而直接将当前子编码传给Sb_Del_Sb_All即可达到预期目的。
-------------------------------------------------------------------------------------------------------------------
declare @S_sbbm varchar
declare @S_sbFh int
select @S_sbbm=SBBM from SB_TZ_SBM where SBBM=@Zsbbm
exec Sb_Del_Sb_All @S_sbbm,@S_sbFh output==>declare @S_sbFh int
exec Sb_Del_Sb_All @Zsbbm,@S_sbFh output
-------------------------------------------------------------------------------------------------------------------
declare @S_sbbm varchar ==> declare @S_sbbm varchar(50)2、以下操作只能获得当前子编码的下一级编码中的一个,即便是能正确执行,也不会将当前自编码的所有下级子编码全部删除掉;而直接将当前子编码传给Sb_Del_Sb_All即可达到预期目的。
-------------------------------------------------------------------------------------------------------------------
declare @S_sbbm varchar
declare @S_sbFh int
select @S_sbbm=SBBM from SB_TZ_SBM where SBBM=@Zsbbm
exec Sb_Del_Sb_All @S_sbbm,@S_sbFh output==>declare @S_sbFh int
exec Sb_Del_Sb_All @Zsbbm,@S_sbFh output
@id int
as
declare @FilterID int --左
declare @RightID int --右
declare @i int
delete from TableMenu where aid=@id
--if exists(select aid,topic_id from TableMenu where topic_id=@id)
select aid,topic_id from TableMenu where topic_id=@id
set @i=@@rowcount --节点扇出数
while @i>0
begin
select @FilterID=aid from TableMenu where topic_id=@id
--递归
exec DelNode @FilterID
--select @RightID=aid from TableMenu where topic_id=@id
--exec DelNode @RightID
set @i=@i-1
end GO/*
已经测试成功,你稍微改动一下就能用
*/
/*
功能:删除一个节点下的所有节点,
不仅是二叉节点(二叉树),任意树也行
*/
CREATE TABLE [TableMenu] (
[aID] [int] NOT NULL ,
[topic_id] [int] NOT NULL ,
CONSTRAINT [PK_TableMenu] PRIMARY KEY CLUSTERED
(
[aID],
[topic_id]
) ON [PRIMARY]
) ON [PRIMARY]
GO
感觉还是少用游标好