时间:2021-07-01 10:21:17 帮助过:1人阅读
--******************** -- 修改分类存储过程 --********************* if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[Category_Update]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1) drop procedure [dbo].[Category_Update] GO Create Proc Category_Update @ClassID int , --需要修改的ClassID @ClassName nvarchar(50), @Info nvarchar(1000), @ParentID int As Declare @EditCode int Declare @StepLen int Declare @matchStr nvarchar(50) Declare @typeCode nvarchar(50) Declare @Code nvarchar(200) Declare @MyCode nvarchar(200) Declare @ParentCode nvarchar(200) Declare @selfCode int Set @editCode=0 Set @StepLen=4 Set @matchStr=REPLICATE(‘_‘,@StepLen) --4个_ set @typeCode=‘‘ Set @Code=‘‘ Set @MyCode=‘‘ Set @selfCode=0 Set @ParentCode=‘‘ Select @ParentCode=Code From [Category] Where ClassID=@ParentID Select @Code=Code From [Category] Where ClassID=@ClassID --修改原有类别 --确定是否要修改Code字段 --查看是否改变了直接父类别(上一级) If @ParentCode != Left(@code,len(@code)-@StepLen) Begin --过滤选择自己做为父类 If(@ParentCode !=@Code) Begin --过滤选择自己的子类为父类 If Len(@ParentCode) > Len(@Code) Begin --因为 Len(@ParentCode) > Len(@Code) 所以可以Left(@ParentCode,Len(@Code)) If Left(@ParentCode,Len(@Code)) != @Code --如果相等则为选择自己的子类为父类 Begin Set @EditCode=1 End End Else Begin Set @EditCode=1 End End End If(@editCode=1) Begin --获取子类中编号最大的Code,column.ParentCode + matchStr中 Select Top 1 @MyCode= Code From [Category] Where Code Like @ParentCode + @matchStr Order By Code DESC --是否有子类 If @@ROWCOUNT >0 Begin Set @selfCode=Cast(Right(@MyCode,@StepLen) As Int ) +1 Set @typeCode=Replicate(‘0‘,@StepLen-1) + Cast(@selfCode As nvarchar) Set @typeCode=Right(@typeCode,@StepLen) Set @typeCode=@ParentCode + @TypeCode End Else --没有子类那么编号从1开始 Begin Set @typeCode=@ParentCode +Replicate(‘0‘,@StepLen-1)+‘1‘ End End If (@editCode=1) Begin Update [Category] Set ClassName=@ClassName,Code=@typeCode, Info=@Info where ClassID=@ClassID End Else Begin Update [Category] Set ClassName=@ClassName, Info=@Info where ClassID=@ClassID End ---修改子类编号(Code) If(@editCode=1) Begin Update [Category] Set Code=@typeCode + Right(Code,Len(Code)-Len(@Code)) Where Code Like @Code + ‘%‘ End GO --************************************ -- 删除一个分类,只允许删除没有子类的分类 --************************************ if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[Category_Del]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1) drop procedure [dbo].[Category_Del] GO Create Proc Category_Del @ClassID int As If (Select Count(ClassID) From[Category] Where Code Like(Select Code From [Category] Where ClassID=@ClassID)+‘%‘ And ClassId <> @ClassId ) >0 Begin RaisError (‘不能删除带有子类的分类‘,16,1) Return End Declare @Code nvarchar(200) Declare @Value int Set @Value=0 Select @Code=[Code],@Value=[DataNum] From [Category] Where [ClassID]=@ClassID Update [Category] Set [DataNum]=[DataNum] - @Value Where [ClassID] In( Select ClassID From [Category] Where Len(Code)<=Len(@Code) And Code=Left(@Code,Len(Code))) Delete From Category Where ClassID=@ClassID Go --************************** -- 根据编号获取一条分类记录 --*************************** if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[Category_Select]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1) drop procedure [dbo].[Category_Select] GO Create PROCEDURE Category_Select @ClassID int AS SELECT [ClassID],[ClassName],[Code],[DataNum], [Info] FROM [Category] WHERE [ClassID]=@ClassID Go --************************** -- 移动分类的排序 --******************************* if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[Category_Move]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1) drop procedure [dbo].[Category_Move] Go Create Proc Category_Move @ClassID int, @IsUp bit=1 As Declare @maskStr nvarchar(200) Declare @tempStr nvarchar(200) Declare @Code nvarchar(200) Set @Code=‘‘ Set @tempStr=‘‘ Select @Code=Code From [Category] Where ClassID=@ClassID Set @maskStr=REPLICATE(N‘-‘,Len(@Code)) If @Code !=‘‘ And ( (Len(@Code) % 4) =0 ) Begin If(@isUp=1) Begin If(Len(@Code) > 4) Begin Select Top 1 @tempStr=Code From [Category] Where Len(Code)=Len(@Code) And Code < @Code And Left(Code,Len(Code)-4)=Left(@Code,Len(@Code)-4) Order By Code DESC End Else Begin Select Top 1 @tempStr=Code From [Category] Where Len(Code)=Len(@Code) And Code < @Code Order By Code DESC End End Else Begin If(Len(@Code) >4) Begin Select Top 1 @tempStr=Code From [Category] Where Len(Code)=Len(@Code) And Code > @Code And Left(Code,Len(Code)-4)=Left(@Code,Len(@Code)-4) Order By Code ASC End Else Begin Select Top 1 @tempStr=Code From [Category] Where Len(Code)=Len(@Code) And Code >@Code Order By Code ASC End End End -- //已经是最前(最后) If @tempStr Is Null Or RTrim(LTrim(@tempStr))=‘‘ Begin return End Declare @CodeLen int Declare @MAXLEN int Set @CodeLen=Len(@Code) Set @MAXLEN=200 --//设置目标类,以及目标类的子类为----0001(目标类)或----00010002(子类)为形式 Update [Category] Set Code=@maskStr +Substring(code,@CodeLen +1,@MAXLEN) Where Left(code,@CodeLen)=@tempStr --//更新当前交换类(包括子类)Code为目标类Code Update [Category] Set Code=@tempStr +Substring(Code,@CodeLen+1,@MAXLEN) Where Left(code,@CodeLen)=@Code --//更新目标类(包括子类)Code为当前交换类Code Update [Category] Set Code=@Code +Substring(code,@CodeLen +1,@MAXLEN) Where Left(code,@CodeLen)=@maskStr Go --**************************** --获取指定分类的父分类信息 --***************************** if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[Category_QueryParent]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1) drop procedure [dbo].[Category_QueryParent] Go Create Proc Category_QueryParent @ClassID int As Declare @ClassCode nvarchar(200) Select @ClassCode=Code From [Category] Where ClassId=@ClassID Select ClassID,ClassName,Code, DataNum From [Category] Where Len(Code)<=Len(@ClassCode) And Code = Left(@ClassCode,Len(Code)) Order By Code Go --****************************** -- 获取整个分类目录 --****************************** if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[Category_Query]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1) drop procedure [dbo].[Category_Query] Go Create Proc Category_Query As