SQL疑难问题

ChaoYang0502 2012-01-30 04:22:39
请教:

数据表

CREATE TABLE t1(id INT IDENTITY(1,1),SortValue INT)
INSERT INTO T1(SortValue)
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 20


实现修改SortValue后,保证SortValue是正确的,即
1.如果把ID为4的SortValue改为4,根据现有数据的情况,直接改成4即可;
2.如果把ID为4的SortValue改为7,根据现有数据的情况,则ID为5的要变成8,ID=6的变为9,7的变10,8的不变;
3.如果把ID为4的SortValue改为2,根据现有数据的情况,则ID为2的要变成3,ID=3的变为4,依次类推;



...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2012-01-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chaoyang0502 的回复:]
非常感谢Vidor!
maco_wang的问题也很值得确认,不过当前我这个的目的是,决定促销产品在列表页上呈现的先后顺序用的,几个编辑用,并发问题可以忽略
[/Quote]
如果这个列是作为排序编号使用,建议这个编号保持连续会好一些。
ChaoYang0502 2012-01-30
  • 打赏
  • 举报
回复
非常感谢Vidor!
maco_wang的问题也很值得确认,不过当前我这个的目的是,决定促销产品在列表页上呈现的先后顺序用的,几个编辑用,并发问题可以忽略
叶子 2012-01-30
  • 打赏
  • 举报
回复
这种设计在并发的时候容易乱套不?
Vidor 2012-01-30
  • 打赏
  • 举报
回复
declare @id int = 4
declare @change int = 2 -- 4,7
declare @group int = (select id-SortValue from T1 where SortValue=@change)

update T1 set SortValue = case id when @id then @change else SortValue+1 end
where id=@id or id-SortValue=@group and SortValue>=@change

select * from T1

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧