日期:2014-05-18 浏览次数:20628 次
create table Hong_Props( PropID int,PropGameType int,PropArrea int ) insert into Hong_Props select 1 ,2 ,1 union all select 2 ,2 ,6 union all select 3 ,1 ,7 union all select 4 ,2 ,3 union all select 5 ,1 ,4 go declare @i int update Hong_Props set @i = PropGameType,PropGameType = PropArrea,PropArrea = @i select * from Hong_Props drop table Hong_Props /******************** PropID PropGameType PropArrea ----------- ------------ ----------- 1 1 2 2 6 2 3 7 1 4 3 2 5 4 1 (5 行受影响) 注意更新的两个字段的数据类型要一致。
------解决方案--------------------
create table Hong_Props( PropID int,PropGameType int,PropArrea int ) insert into Hong_Props select 1 ,2 ,1 union all select 2 ,2 ,6 union all select 3 ,1 ,7 union all select 4 ,2 ,3 union all select 5 ,1 ,4 go declare @i int update Hong_Props set @i = PropGameType,PropGameType = PropArrea,PropArrea = @i select * from Hong_Props drop table Hong_Props /************************ PropID PropGameType PropArrea ----------- ------------ ----------- 1 1 2 2 6 2 3 7 1 4 3 2 5 4 1 (5 行受影响) 注意更新俩字段的数据类型。
------解决方案--------------------
create table test ( id int identity(1,1), name varchar(10), px int, ) go insert into test values('A',1) insert into test values('B',2) insert into test values('C',3) insert into test values('D',4) insert into test values('E',5) insert into test values('F',6) go --为删除前,排序字段px是连续的 select * from test /*** id name px ----------- ---------- ----------- 1 A 1 2 B 2 3 C 3 4 D 4 5 E 5 6 F 6 (6 行受影响) ***/ --当有删除数据存在时,px并不是连续的,注意ID为3和5的px字段 delete from test where id = 4 select * from test /*** id name px ----------- ---------- ----------- 1 A 1 2 B 2 3 C 3 --3和5不是连续,所以在移动时不能直接+1或-1 5 E 5 6 F 6 (5 行受影响) ***/ --将ID为3的数据上移 declare @i int declare @j int select @j = px from test where id = 3 select top 1 @i = px from test where px < @j order by px desc update test set px = (case when px = @i then @j else @i end) where px in (@i,@j) select * from test /*** id name px ----------- ---------- ----------- 1 A 1 2 B 3 3 C 2 --ID为3数据排序上移,和ID为2的交换排序 5 E 5 6 F 6 (5 行受影响) ***/ --将ID为2的数据下移 declare @i int declare @j int select @j = px from test where id = 2 select top 1 @i = px from test where px > @j order by px update test set px = (case when px = @i then @j else @i end) where px in (@i,@j) select * from test /*** id name px ----------- ---------- ----------- 1 A 1 2 B 5 --ID为2的数据排序下移,和ID为5的交换排序 3 C 2 5 E 3 6 F 6 (5 行受影响) ***/ drop table test
------解决方案--------------------
美女啊,加个排序字段(Sort)就行,设置排序的值就行了。