表如下:
ID    A      B     C    A1     B1     C1   A2     B2     C3 An     Bn     Cn
 1   NULL   NULL NULL  NULL   NULL   NULL NULL   NULL   NULL 。
 2   红色   黄色 黑色  绿色   蓝色   白色 白色   灰色   绿色 。
 3   NULL   NULL NULL  NULL   NULL   NULL NULL   NULL   NULL 。
 4   NULL   NULL NULL  NULL   NULL   NULL NULL   NULL   NULL 。
 5   NULL   NULL NULL  NULL   NULL   NULL NULL   NULL   NULL 。
假设n=50
想得到的效果是:
ID    A      B     C    A1     B1     C1   A2     B2     C3 An     Bn     Cn
 1   红色   黄色 黑色  绿色   蓝色   白色 白色   灰色   绿色 。
 2   红色   黄色 黑色  绿色   蓝色   白色 白色   灰色   绿色 。
 3   红色   黄色 黑色  绿色   蓝色   白色 白色   灰色   绿色 。
 4   红色   黄色 黑色  绿色   蓝色   白色 白色   灰色   绿色 。
 5   红色   黄色 黑色  绿色   蓝色   白色 白色   灰色   绿色 。

解决方案 »

  1.   


    select *,count(*) into #tmp from tb where A is not nulldeclare @i int,@j int
    set @i = 1;
    select @j = count(*) over() from tb;truncate table tb;while @i <= @j
    begin
       insert tb select @i,* from #tmp;
       set @i = @i + 1;
    endend
      

  2.   


    利用表syscolumns,做一个自动匹配的更新列
      

  3.   


    declare @stmt varchar(2000);
    declare @id int;set @id=1;
    where @id<=50
    begin
     set @stmt='update t1 set a=t2.a, b=t2.b, c=t2.c, '+
      'a'+ltrim(@id)+'=t2.a'+ltrim(@id)+','+
      'b'+ltrim(@id)+'=t2.b'+ltrim(@id)+','+
      'c'+ltrim(@id)+'=t2.c'+ltrim(@id);
    end
    set @stmt=@stmt+' from tb t1,(select * from tb where id=2) t2';exec(@stmt);
      

  4.   

    declare @stmt varchar(2000);
    declare @id int;
    set @id=1;
    set @stmt=''
    while @id<=50
    begin
     set @stmt=ISNULL(@stmt+',',',')+ 'a'+ltrim(@id)+'=t2.a'+ltrim(@id)+','+
      'b'+ltrim(@id)+'=t2.b'+ltrim(@id)+','+
      'c'+ltrim(@id)+'=t2.c'+ltrim(@id)+CHAR(13)
     set @id = @id +1
    end
    set @stmt='update t1 set a=t2.a, b=t2.b, c=t2.c'+@stmt+' from tb t1,(select * from tb where id=2) t2';
    print @stmt
    --exec(@stmt);
    /*
    update t1 set a=t2.a, b=t2.b, c=t2.c
    ,a1=t2.a1,b1=t2.b1,c1=t2.c1
    ,a2=t2.a2,b2=t2.b2,c2=t2.c2
    ,a3=t2.a3,b3=t2.b3,c3=t2.c3
    ,a4=t2.a4,b4=t2.b4,c4=t2.c4
    ,a5=t2.a5,b5=t2.b5,c5=t2.c5
    ,a6=t2.a6,b6=t2.b6,c6=t2.c6
    ,a7=t2.a7,b7=t2.b7,c7=t2.c7
    ,a8=t2.a8,b8=t2.b8,c8=t2.c8
    ,a9=t2.a9,b9=t2.b9,c9=t2.c9
    ,a10=t2.a10,b10=t2.b10,c10=t2.c10
    ,a11=t2.a11,b11=t2.b11,c11=t2.c11
    ,a12=t2.a12,b12=t2.b12,c12=t2.c12
    ,a13=t2.a13,b13=t2.b13,c13=t2.c13
    ,a14=t2.a14,b14=t2.b14,c14=t2.c14
    ,a15=t2.a15,b15=t2.b15,c15=t2.c15
    ,a16=t2.a16,b16=t2.b16,c16=t2.c16
    ,a17=t2.a17,b17=t2.b17,c17=t2.c17
    ,a18=t2.a18,b18=t2.b18,c18=t2.c18
    ,a19=t2.a19,b19=t2.b19,c19=t2.c19
    ,a20=t2.a20,b20=t2.b20,c20=t2.c20
    ,a21=t2.a21,b21=t2.b21,c21=t2.c21
    ,a22=t2.a22,b22=t2.b22,c22=t2.c22
    ,a23=t2.a23,b23=t2.b23,c23=t2.c23
    ,a24=t2.a24,b24=t2.b24,c24=t2.c24
    ,a25=t2.a25,b25=t2.b25,c25=t2.c25
    ,a26=t2.a26,b26=t2.b26,c26=t2.c26
    ,a27=t2.a27,b27=t2.b27,c27=t2.c27
    ,a28=t2.a28,b28=t2.b28,c28=t2.c28
    ,a29=t2.a29,b29=t2.b29,c29=t2.c29
    ,a30=t2.a30,b30=t2.b30,c30=t2.c30
    ,a31=t2.a31,b31=t2.b31,c31=t2.c31
    ,a32=t2.a32,b32=t2.b32,c32=t2.c32
    ,a33=t2.a33,b33=t2.b33,c33=t2.c33
    ,a34=t2.a34,b34=t2.b34,c34=t2.c34
    ,a35=t2.a35,b35=t2.b35,c35=t2.c35
    ,a36=t2.a36,b36=t2.b36,c36=t2.c36
    ,a37=t2.a37,b37=t2.b37,c37=t2.c37
    ,a38=t2.a38,b38=t2.b38,c38=t2.c38
    ,a39=t2.a39,b39=t2.b39,c39=t2.c39
    ,a40=t2.a40,b40=t2.b40,c40=t2.c40
    ,a41=t2.a41,b41=t2.b41,c41=t2.c41
    ,a42=t2.a42,b42=t2.b42,c42=t2.c42
    ,a43=t2.a43,b43=t2.b43,c43=t2.c43
    ,a44=t2.a44,b44=t2.b44,c44=t2.c44
    ,a45=t2.a45,b45=t2.b45,c45=t2.c45
    ,a46=t2.a46,b46=t2.b46,c46=t2.c46
    ,a47=t2.a47,b47=t2.b47,c47=t2.c47
    ,a48=t2.a48,b48=t2.b48,c48=t2.c48
    ,a49=t2.a49,b49=t2.b49,c49=t2.c49
    ,a50=t2.a50,b50=t2.b50,c50=t2.c50
     from tb t1,(select * from tb where id=2) t2*/
      

  5.   

    declare @stmt varchar(2000);
    declare @id int;
    set @id=1;
    while @id<=50
    begin
     set @stmt=ISNULL(@stmt+',',',')+ 'a'+ltrim(@id)+'=t2.a'+ltrim(@id)+','+
      'b'+ltrim(@id)+'=t2.b'+ltrim(@id)+','+
      'c'+ltrim(@id)+'=t2.c'+ltrim(@id)+CHAR(13)
     set @id = @id +1
    end
    set @stmt='update t1 set a=t2.a, b=t2.b, c=t2.c'+@stmt+' from tb t1,(select * from tb where id=2) t2';
    print @stmt
    --exec(@stmt);
    /*
    update t1 set a=t2.a, b=t2.b, c=t2.c
    ,a1=t2.a1,b1=t2.b1,c1=t2.c1
    ,a2=t2.a2,b2=t2.b2,c2=t2.c2
    ,a3=t2.a3,b3=t2.b3,c3=t2.c3
    ,a4=t2.a4,b4=t2.b4,c4=t2.c4
    ,a5=t2.a5,b5=t2.b5,c5=t2.c5
    ,a6=t2.a6,b6=t2.b6,c6=t2.c6
    ,a7=t2.a7,b7=t2.b7,c7=t2.c7
    ,a8=t2.a8,b8=t2.b8,c8=t2.c8
    ,a9=t2.a9,b9=t2.b9,c9=t2.c9
    ,a10=t2.a10,b10=t2.b10,c10=t2.c10
    ,a11=t2.a11,b11=t2.b11,c11=t2.c11
    ,a12=t2.a12,b12=t2.b12,c12=t2.c12
    ,a13=t2.a13,b13=t2.b13,c13=t2.c13
    ,a14=t2.a14,b14=t2.b14,c14=t2.c14
    ,a15=t2.a15,b15=t2.b15,c15=t2.c15
    ,a16=t2.a16,b16=t2.b16,c16=t2.c16
    ,a17=t2.a17,b17=t2.b17,c17=t2.c17
    ,a18=t2.a18,b18=t2.b18,c18=t2.c18
    ,a19=t2.a19,b19=t2.b19,c19=t2.c19
    ,a20=t2.a20,b20=t2.b20,c20=t2.c20
    ,a21=t2.a21,b21=t2.b21,c21=t2.c21
    ,a22=t2.a22,b22=t2.b22,c22=t2.c22
    ,a23=t2.a23,b23=t2.b23,c23=t2.c23
    ,a24=t2.a24,b24=t2.b24,c24=t2.c24
    ,a25=t2.a25,b25=t2.b25,c25=t2.c25
    ,a26=t2.a26,b26=t2.b26,c26=t2.c26
    ,a27=t2.a27,b27=t2.b27,c27=t2.c27
    ,a28=t2.a28,b28=t2.b28,c28=t2.c28
    ,a29=t2.a29,b29=t2.b29,c29=t2.c29
    ,a30=t2.a30,b30=t2.b30,c30=t2.c30
    ,a31=t2.a31,b31=t2.b31,c31=t2.c31
    ,a32=t2.a32,b32=t2.b32,c32=t2.c32
    ,a33=t2.a33,b33=t2.b33,c33=t2.c33
    ,a34=t2.a34,b34=t2.b34,c34=t2.c34
    ,a35=t2.a35,b35=t2.b35,c35=t2.c35
    ,a36=t2.a36,b36=t2.b36,c36=t2.c36
    ,a37=t2.a37,b37=t2.b37,c37=t2.c37
    ,a38=t2.a38,b38=t2.b38,c38=t2.c38
    ,a39=t2.a39,b39=t2.b39,c39=t2.c39
    ,a40=t2.a40,b40=t2.b40,c40=t2.c40
    ,a41=t2.a41,b41=t2.b41,c41=t2.c41
    ,a42=t2.a42,b42=t2.b42,c42=t2.c42
    ,a43=t2.a43,b43=t2.b43,c43=t2.c43
    ,a44=t2.a44,b44=t2.b44,c44=t2.c44
    ,a45=t2.a45,b45=t2.b45,c45=t2.c45
    ,a46=t2.a46,b46=t2.b46,c46=t2.c46
    ,a47=t2.a47,b47=t2.b47,c47=t2.c47
    ,a48=t2.a48,b48=t2.b48,c48=t2.c48
    ,a49=t2.a49,b49=t2.b49,c49=t2.c49
    ,a50=t2.a50,b50=t2.b50,c50=t2.c50
     from tb t1,(select * from tb where id=2) t2*/