none
重新排id RRS feed

  • 问题

  • id XXX XXX  XXX      XXX      QF

    1 03 6001 0000168 000001 0
    2 01 5001 0000208 000001 0
    3 01 5002 0000232 000001 0
    4 01 5003 0000236 000001 0
    5 03 6002 0000275 000001 0
    6 03 6003 0000300 000001 0
    7 01 5004 0000361 000001 1
    8 03 6004 0000377 000001 0
    9 03 6005 0000404 000001 0
    10 03 6006 0000431 000001 0
    11 03 6007 0000450 000001 0
    12 03 6008 0000458 000001 0
    13 01 5005 0000470 000001 0
    14 01 5006 0000471 000001 0
    15 03 6009 0000512 000001 0
    16 03 6010 0000534 000001 0
    17 03 6011 0000542 000001 0
    18 03 6012 0000556 000001 0
    19 03 6013 0000602 000001 0
    20 01 5007 0000608 000001 0

    以QF='1' 的行 重新排id.

    结果:

    14 03 6001 0000168 000001 0
    15 01 5001 0000208 000001 0
    16 01 5002 0000232 000001 0
    17 01 5003 0000236 000001 0
    18 03 6002 0000275 000001 0
    19 03 6003 0000300 000001 0
    20 01 5004 0000361 000001 1
    1 03 6004 0000377 000001 0
    2 03 6005 0000404 000001 0
    3 03 6006 0000431 000001 0
    4 03 6007 0000450 000001 0
    5 03 6008 0000458 000001 0
    6 01 5005 0000470 000001 0
    7 01 5006 0000471 000001 0
    8 03 6009 0000512 000001 0
    9 03 6010 0000534 000001 0
    10 03 6011 0000542 000001 0
    11 03 6012 0000556 000001 0
    12 03 6013 0000602 000001 0
    13 01 5007 0000608 000001 0

     

    2011年5月23日 1:34

答案

  • 你好 Pires0803,

     

    根据你的描述,貌似只能一条一条的去UPDATE,如果做批处理的话很困难。 下面是我用游标做的一些测试,只能提供一些思路,请慎重使用游标。

     

    DECLARE @t1 TABLE (Col1 INT, Col2 INT)
    DECLARE @t2 TABLE (Col1 INT, Col2 INT, Col3 INT) 
    INSERT INTO @t1 VALUES (1,0)
    INSERT INTO @t1 VALUES (2,0)
    INSERT INTO @t1 VALUES (3,1)
    INSERT INTO @t1 VALUES (4,1)
    INSERT INTO @t1 VALUES (5,0)
    INSERT INTO @t1 VALUES (6,0)
    INSERT INTO @t1 VALUES (7,1)
    
    DECLARE @Col1 INT
    DECLARE @Col2 INT
    DECLARE @i INT =0
    DECLARE Cursor1 CURSOR FOR SELECT Col1,Col2 FROM @t1 ORDER BY Col1
    OPEN Cursor1
    FETCH NEXT FROM Cursor1 INTO @Col1,@Col2 
    WHILE @@FETCH_STATUS = 0
    BEGIN 
        SET @i = CASE WHEN @Col2 = 1 THEN 1 ELSE @i+1 END    
        INSERT INTO @t2 VALUES (@Col1,@Col2,@i)    
        FETCH NEXT FROM Cursor1 INTO @Col1,@Col2 
    END
    CLOSE Cursor1 
    DEALLOCATE Cursor1 
    SELECT * FROM @t2
    

     

    Thanks,
    Weilin Qiao 

     


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. This can be beneficial to other community members reading the thread.
    2011年5月25日 7:16
    版主

全部回复

  • What's the point you try to make? Is id an identity column?
    2011年5月23日 2:05
  • 以QF='1' 的记录为起始,重新设置ID.
    2011年5月23日 3:23
  • 你好 Pires0803,

     

    根据你的描述,貌似只能一条一条的去UPDATE,如果做批处理的话很困难。 下面是我用游标做的一些测试,只能提供一些思路,请慎重使用游标。

     

    DECLARE @t1 TABLE (Col1 INT, Col2 INT)
    DECLARE @t2 TABLE (Col1 INT, Col2 INT, Col3 INT) 
    INSERT INTO @t1 VALUES (1,0)
    INSERT INTO @t1 VALUES (2,0)
    INSERT INTO @t1 VALUES (3,1)
    INSERT INTO @t1 VALUES (4,1)
    INSERT INTO @t1 VALUES (5,0)
    INSERT INTO @t1 VALUES (6,0)
    INSERT INTO @t1 VALUES (7,1)
    
    DECLARE @Col1 INT
    DECLARE @Col2 INT
    DECLARE @i INT =0
    DECLARE Cursor1 CURSOR FOR SELECT Col1,Col2 FROM @t1 ORDER BY Col1
    OPEN Cursor1
    FETCH NEXT FROM Cursor1 INTO @Col1,@Col2 
    WHILE @@FETCH_STATUS = 0
    BEGIN 
        SET @i = CASE WHEN @Col2 = 1 THEN 1 ELSE @i+1 END    
        INSERT INTO @t2 VALUES (@Col1,@Col2,@i)    
        FETCH NEXT FROM Cursor1 INTO @Col1,@Col2 
    END
    CLOSE Cursor1 
    DEALLOCATE Cursor1 
    SELECT * FROM @t2
    

     

    Thanks,
    Weilin Qiao 

     


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. This can be beneficial to other community members reading the thread.
    2011年5月25日 7:16
    版主