如何调整顺序,解决后马上结帖。

Alisa 2006-08-10 02:08:58
需要实现的功能:有很多记录(上千),如果调整顺序。
我的思路是:增加记录是id号唯一,需要调整顺序改动调整序号这个字段,是有两个分支,一是两个位置之间调换,二是插入一条后面的顺序自动延后。
具体到表
id,name,调整顺序
1 a 1
2 b 2
3 c 3
4 d 4
分支一结果:
id,name,调整顺序
1 a 4
2 b 2
3 c 3
4 d 1
分支二结果:
id,name,调整顺序
1 a 1
2 b 5
3 c 2
4 d 3
5 e 4
不知道如何实现。请教大家,诚谢
...全文
292 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alisa 2006-08-22
  • 打赏
  • 举报
回复
感谢各位的关注,现在结帖liangpei2008(逍遥叹):80分 AcFor(烟光):10分 zjdyzwx(十一月猪):10分
十一月猪 2006-08-10
  • 打赏
  • 举报
回复
Try:
Create Trigger udt_test_i on test
after insert
as
Begin
Update test
Set AdjustSequent = (Select count(*) From test)
Where id = 2

If @@error <> 0
Begin
Raiserror('Update 2 Error1', 16 , 1)
Return
End

Update test
Set AdjustSequent = Id - 1
Where Id > 2

If @@error <> 0
Begin
Raiserror('Update 3 Error1', 16 , 1)
Return
End
End


liangpei2008 2006-08-10
  • 打赏
  • 举报
回复
1.性能肯定会受影响
2.第二分支只能用触发器来实现,每次插入操作时将ID为2的排序值赋于当前ID最大值,然后除去ID为2的行进行与分支1类似的排序,方法不一定好,看看别的朋友有没有好方法!:)
Alisa 2006-08-10
  • 打赏
  • 举报
回复
谢谢liangpei2008(逍遥叹),还有更好的解决办法吗,
Alisa 2006-08-10
  • 打赏
  • 举报
回复
这样调整的话会不会每增加一次都跑一便数据库呢,性能会不会受影响?
AcFor 2006-08-10
  • 打赏
  • 举报
回复
跑题,不过是一个方法
AcFor 2006-08-10
  • 打赏
  • 举报
回复
Create table test(id int,name varchar(10),AdjustSequent Int)
Insert Test Select 1,'a',1
Union all select 2,'b',2
union all select 3,'c',3
union all select 4,'d',4
--分支一
declare @AdjustSequent int
select @AdjustSequent=max(AdjustSequent) from test
print @AdjustSequent
update test set AdjustSequent=@AdjustSequent-AdjustSequent+1
Alisa 2006-08-10
  • 打赏
  • 举报
回复
2处的调整后的顺序是id中第5个记录,相当于增加一条记录后上移到第二个位置
liangpei2008 2006-08-10
  • 打赏
  • 举报
回复
分支二可以用触发器来做,插入一条即更新顺序,只是想不通当新增一条记录后,为何2处的顺序会变为5?
liangpei2008 2006-08-10
  • 打赏
  • 举报
回复
--分支1
--测试数据
Create table test(id int,name varchar(10),AdjustSequent Int)
Insert Test Select 1,'a',1
Union all select 2,'b',2
union all select 3,'c',3
union all select 4,'d',4
--更新顺序列
Update A
Set AdjustSequent=(select count(1) from test where id>=A.id )
From Test A
--结果
select * From test
Alisa 2006-08-10
  • 打赏
  • 举报
回复
这个就是要实现的
id,name,调整顺序(调整前的表状态)
1 a 1
2 b 2
3 c 3
4 d 4
分支一结果:
id,name,调整顺序(调整后实现两个位置的调换)
1 a 4
2 b 2
3 c 3
4 d 1
分支二结果:
id,name,调整顺序(调整后实现插入一条记录,同时调整后面的顺序)
1 a 1
2 b 5
3 c 2
4 d 3
5 e 4
lzhs 2006-08-10
  • 打赏
  • 举报
回复
看不明白你的意思,举个例子详细说明一下呢?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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