日期:2014-05-18  浏览次数:20500 次

SQL疑难问题
请教:

数据表
SQL code

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,依次类推;





------解决方案--------------------
SQL code
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