select od,title from table1 order by od 返回这样的结果
100   aaaa
200   bb
300   ccc
400   这行是400
500   500行现在想在or为300的后边插入一行,结果变成
100   aaaa
200   bb
300   ccc
400   这是插入的行   ==>在od为300的行插入后,原300后边的数据重新按顺序编号
500   这行是400      ==>这是原来的400, 上面插入后or这一列的值变为500
600   500行这样的要求能不能用一条SQL语句实现啊?

解决方案 »

  1.   

    需要update表吗?还是表中记录不变,查询结果变我感觉一条语句很难实现
      

  2.   

    原本是想update表的,如果update表不行,
    看看能不能一条语句查询出来
      

  3.   

    declare @T table(od int,title varchar(50))
    insert into @Tselect 100,'aaaa' union all
    select 200,'bb' union all
    select 300,'ccc' union all
    select 400,'这行是400' union all
    select 500,'500行' 
     
     
    --400 这是插入的行 select od,title from @T order by od 
    declare @temp int
    set @temp=400 
    update @T set od=od+100 where od>=@temp
    insert into @T(od,title) values(@temp,'这是插入的行')
    select od,title from @T order by od ————————————————————————————————
    od          title
    ----------- --------------------------------------------------
    100         aaaa
    200         bb
    300         ccc
    400         这是插入的行
    500         这行是400
    600         500行
      

  4.   

    直接UPDATE貌似不太可能,因为里面既涉及到INSERT操作又有UPDATE,查询的话倒是可以CREATE TABLE tbr
    (
    Id INT,
    Memo VARCHAR(100)
    )
    GO
    INSERT INTO tbr
    SELECT 100, 'aaaa' UNION
    SELECT 200, 'bb' UNION
    SELECT 300, 'ccc' UNION
    SELECT 400, '这行是400' UNION
    SELECT 500, '500行'SELECT ID,Memo
    FROM tbr
    WHERE ID < 400
    UNION
    SELECT 400,'这是插入的行'
    FROM tbr
    UNION
    SELECT ID + 100,Memo
    FROM tbr
    WHERE ID > 300ID Memo
    100 aaaa
    200 bb
    300 ccc
    400 这是插入的行
    500 这行是400
    600 500行
      

  5.   

    --drop table #tb1
    select 100 od,'aaaa' title into #tb1 union all
    select 200,'bb' union all
    select 300,'ccc' union all
    select 400,'这行是400' union all
    select 500,'500行'  union all
    select 600,'600行'--drop table #tb
    select *,0 aod into #tb from #tb1 order by oddeclare @od1 int=0
    declare @od2 int=0
    update #tb set aod=@od2,@od2=case when @od2-@od1<200 then @od1 else 0 end,@od1=od from #tbselect od,case when od<400 then title when od=400 then '这是插入的行'
    else cast(aod as nvarchar(20))+'行' end from #tb