Begin Rollback Tran Return 1 --有子节点 End Else Begin Rollback Tran Return 2--未知错误 End End GO ================================================================== 存储过程三:编辑分类 CREATE PROCEDURE sp_Column_Update ( @Column_ID int, @Parent_ID int, @Column_Name nvarchar(50), @Column_Intro nvarchar(1000) ) AS Declare @Err As int Set @Err=0
Begin Tran
--获取修改前的:Parent_ID,Column_Depth,Column_Order Declare @oParent_ID As int Declare @oColumn_Depth As int Declare @oColumn_Order As int Declare @oColumn_Path As nvarchar(1000)
Select @oParent_ID = Parent_ID, @oColumn_Depth = Column_Depth,@oColumn_Order = Column_Order, @oColumn_Path = Column_Path From Tb_Column Where Column_ID = @Column_ID IF @oParent_ID Is Null Begin Set @Err = 1 Goto theEnd End
--如果父ID没有改变,则直接修改栏目名和栏目简介 IF @oParent_ID = @Parent_ID Begin Update Tb_Column Set Column_Name = @Column_Name,Column_Intro = @Column_Intro Where Column_ID = @Column_ID IF @@Error <> 0 Set @Err = 2 Goto theEnd End
Declare @nColumn_Path As nvarchar(1000) Declare @nColumn_Depth As int Declare @nColumn_Order As int
--获取当前节点作为父节点所包含的节点数[包括自身] 注:如果返回 “1” 说明是单节点 Declare @theCount As int Select @theCount = Count(Column_ID) From Tb_Column Where Column_ID=@Column_ID Or Column_Path like ''+@oColumn_Path+'%' IF @theCount Is Null Begin Set @Err = 3 Goto theEnd End
IF @Parent_ID=0 --如果是设置为顶级节点,将节点设置为最后一个顶级节点 Begin --Print '设置为顶级栏目' Set @nColumn_Path = Ltrim(Str(@Column_ID)) Set @nColumn_Depth =1
Select @nColumn_Order = Max(Column_Order) From Tb_Column IF @nColumn_Order Is NULL Begin Set @Err = 4 Goto theEnd End
Set @nColumn_Order = @nColumn_Order - @theCount + 1