插入序号及更新、删除调整序号,保证数值是连续的 实现原理
insert(查询当前主题下的最大值,如果没有就直接添加,如果有,
就比较,如果当前大,直接插入(保证是连续的);如果当前小,就重新进行排序 大于等于的 进行加一 ,为当前腾一个位置
注释:如果:当前条件下的表中有数据 进入 逻辑A,?
??? ??? ??? 否则 : 设置当前domain的序号为1 ,插入数据(当前domain中的序号不一定是1)
??? ??? ???
??? ??? ??? 逻辑A:
??? ??? ??? ??? 1: 获取当前条件下表中的最大的序号 赋给: @ROLRATE
??? ??? ??? ??? 2: 如果: 表中的最大序号 小于 当前domain中的序号,直接插入到最后一行使序号为???? @ROLRATE+1
??? ??? ??? ????????????????? 否则: 使表中所有大于等于 当前domain中的序号的记录的序号加 1 ,再插入当前domain.
if (select count(SBJCOD) from XXX where SBJCOD=#sbjcod:char# ) >= 1
begin
??? declare @ROLRATE int
??? set @ROLRATE =( select max(ROLRATE) from XXX where SBJCOD=#sbjcod:char# )??
??? if @ROLRATE <![CDATA[ < ]]>#rolrate:int#
?????? begin
?????? ??? insert into XXX (SBJCOD, ROLCOD, ROLNAM ,ROLRATE, ORGLVL,ISRPTGRP) values (#sbjcod:char#, #rolcod:int#, #rolnam:varchar#,@ROLRATE+1,#orglvl:char#,#isrptgrp:char#)
?????? end
???? else
???? begin
??????? update XXX set ROLRATE=ROLRATE+1 where SBJCOD=#sbjcod:char# and ROLRATE >= #rolrate:int#
??????? insert into XXX (SBJCOD, ROLCOD, ROLNAM ,ROLRATE, ORGLVL,ISRPTGRP) values (#sbjcod:char#, #rolcod:int#, #rolnam:varchar#, #rolrate:int#,#orglvl:char#,#isrptgrp:char#)
???? end
end
else
begin
??? insert into XXX (SBJCOD, ROLCOD, ROLNAM ,ROLRATE, ORGLVL,ISRPTGRP) values (#sbjcod:char#, #rolcod:int#, #rolnam:varchar#, 1,#orglvl:char#,#isrptgrp:char#)
end???
update
查询当前主题下的最大值
调整,如果从小调整大了。在此区间的进行-1操作
????? 如果调整小了,在此区间的进行+1操作。
sql注释
??? ??? ??? 1:获取当前条件下表中的最大的序号 赋给: @ROLRATE
??? ??? ??? 2:如果:变更后的domain的序号(A) 大于变更前的序号(B),使表中所有小于等于A 且 小于B的记录的序号减1
??? ??? ??? ?????? 如果:变更后的domain的序号 小于变更前的序号,使表中所有大于等于A 且 小于B的记录的序号加1
??? ??? ??? ?????? 如果:变更后的domain的序号 等于变更前的序号,不进行操作。
??? ??? ??? 3:[email protected] 与 A 进行比较
??? ??? ??? ?????? 如果 变更后的序号?? 大于 当前条件下最大序号,[email protected]
??? ??? ??? ??????? 否则? 直接插入。
declare @ROLRATE int
set @ROLRATE =( select max(ROLRATE) from XXX where SBJCOD=#sbjcod:char# )
if #rolrate:int# > #tmprolrate:int#
begin
update XXX set ROLRATE=ROLRATE-1 where SBJCOD=#sbjcod:char#? and <![CDATA[ ROLRATE <= #rolrate:int# and ROLRATE > #tmprolrate:int# ]]>
end
if #rolrate:int# <![CDATA[ < ]]>? #tmprolrate:int#
begin
update XXX set ROLRATE=ROLRATE+1 where SBJCOD=#sbjcod:char#? and <![CDATA[ ROLRATE >= #rolrate:int# and ROLRATE < #tmprolrate:int# ]]>
end
//调整过后,再处理当前值和? 最大值的关系(保证最大值是连续的**********)
if @ROLRATE <![CDATA[ < ]]>#rolrate:int#
begin
??? update XXX set SBJCOD=#sbjcod:char# , ROLCOD=#rolcod:int# , ROLNAM=#rolnam:varchar# , [email protected] ,ORGLVL=#orglvl:char#,ISRPTGRP=#isrptgrp:char# where SBJCOD=#sbjcod:char# and ROLCOD=#rolcod:int#
end
else
begin
??? update XXX set SBJCOD=#sbjcod:char# , ROLCOD=#rolcod:int# , ROLNAM=#rolnam:varchar# , ROLRATE=#rolrate:int# ,ORGLVL=#orglvl:char#,ISRPTGRP=#isrptgrp:char# where SBJCOD=#sbjcod:char# and ROLCOD=#rolcod:int#
end
删除操作
sql 注释
??? ??? ???? 1: 删除当前domain ,
??? ??? ???? 2: 更新表中序号大于当前domain序号的记录(CTSQN-1)?
delete from XXX where SBJCOD=#sbjcod:char# and ANLCOD=#anlcod:varchar# and COLCOD=#colcod:varchar# and CFGBSL=#cfgbsl:char#
update XXX set CTSQN=CTSQN-1 where SBJCOD=#sbjcod:char# and ANLCOD=#anlcod:varchar#? and CFGBSL=#cfgbsl:char# and CTSQN > #ctsqn:int#
?
?
备注:
1:设置方式???
DECLARE @dim_val_cnt INT
SELECT @dim_val_cnt = COUNT(1) from XX
2:比较
IF (@dim_val_cnt = 0)
begin?
end
else if ()
else if ()
else
?