首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于主键同时做排序字段的修改有关问题

2012-02-27 
关于主键同时做排序字段的修改问题数据库表T(A,B,.....),其中A、B为主键,同时B还作为排序字段。当修改B时,如

关于主键同时做排序字段的修改问题
数据库表T(A,   B,   .....),其中A、B为主键,同时B还作为排序字段。当修改B时,如将@oldB改为@newB,我的做法是

--(1)将oldB改为-1:
Update   T   Set   B=-1   Where   A=@A   and   B=@oldB

--   (2)如果是将较大的数改为较小的,则将[@newB,@oldB)之间的数加1
if   (@newB   <   @oldB)
        Update   T   Set   B=B+1   Where   A=@A   and   B> =@newB   and   B <@oldB
else     --   否则将(@oldB,   @newB]之间的数减1
        Update   T   Set   B=B-1   Where   A=@A   and   B> @oldB   and   B <=@newB

--   (3)将-1再改回来
update   T   Set   B=@newB   Where   A=@A   and   B=-1

问题:这样处理时,将一个较小的数改为较大的没有问题,但将一个较大的数改为较小的数时,出现主键值不能重复的错误。
    不启用事务,发现是在第二步出的错,难道批量处理时,每处理一条记录就进行完整性检查,而不是这个语句执行完再检查?不知道大家有什么好的办法。

[解决办法]
写个触发器实现
[解决办法]
关注,帮顶

热点排行