表名为TK,第一行为列名,如何更新每行以answer列内容为列名的列的内容,更新后的数据为更新前数据加@@,如第一行answer列内容为B,就将第一行B列的内容改为“1946@@”。
number answer question A B C D
1 B 问题1 1945年 1946年 1948年 1952年
2 D 问题2 主机 外设 CPU 硬件
3 B 问题3 输出设备 控制器 显示器 键盘

解决方案 »

  1.   

    -- Test Data: ta
    If object_id('ta') is not null 
        Drop table ta
    Go
    Create table ta(number int,answer varchar(1),question varchar(8),A varchar(8),B varchar(8),C varchar(8),D varchar(8))
    Go
    Insert into ta
    select 1,'B','问题1','1945年','1946年','1948年','1952年' union all
    select 2,'D','问题2','主机','外设','CPU','硬件' union all
    select 3,'B','问题3','输出设备','控制器','显示器','键盘' 
    Go
    --Start
    Select number,answer,question,
    a = case when answer = 'a' then left(a,4) +'@@@' else a end,
    b = case when answer = 'b' then left(b,4) +'@@@' else b end,
    c = case when answer = 'c' then left(c,4) +'@@@' else c end,
    d = case when answer = 'd' then left(d,4) +'@@@' else d end
    from ta --Result:
    /*
    number      answer question a           b           c           d           
    ----------- ------ -------- ----------- ----------- ----------- ----------- 
    1           B      问题1      1945年       1946@@@     1948年       1952年
    2           D      问题2      主机          外设          CPU         硬件@@@
    3           B      问题3      输出设备        控制器@@@      显示器         键盘(所影响的行数为 3 行
    */
    --End 
      

  2.   


    --用3楼的 data--Start
    declare @id varchar(10),@flg varchar(10),@sql varchar(1000)
    declare col_curs cursor
    for
       select number,answer from ta
    open col_curs
    fetch next from col_curs into @id,@flg
    while (@@fetch_status <> -1)
    begin
       if (@@fetch_status <> -2)
       begin
          exec ('update ta set '+@flg+'=' + @flg + '+' + '''@@'''+' where number='+@id)
       end
       fetch next from col_curs into @id,@flg
    end
    close col_curs
    deallocate col_curs--Result:
    /*
    number answer question a           b           c           d           
    ------ ------ -------- ----------- ----------- ----------- -----------
    1 B 问题1 1945年 1946年@@ 1948年 1952年
    2 D 问题2 主机 外设 CPU 硬件@@
    3 B 问题3 输出设备 控制器@@ 显示器 键盘
    */
    --drop table ta
    --End 
      

  3.   

        declare @currAnswer nvarchar(100),@id nvarchar(10),@sql nvarchar(1000)
        declare mycursor cursor
        for 
        select id,answer from ta 
        open mycursor
        fetch next from mycursor into @id,@currAnswer
        while(@@fetch status=0)
         begin
          set @sql = 'update ta set '+@currAnswer+'='+@currAnswer+'+'+'''@@'''+'where id='+@id
          exec(@sql)
          fetch next from mycursor into @id,@currAnswer
         end
        close mycursor
        deallocate mycursor
       
      

  4.   

    来个直接点的:update tk set A = A + '@@'
    where answer = 'A'
    update tk set B = B + '@@'
    where answer = 'B'
    update tk set C = C + '@@'
    where answer = 'C'
    update tk set D = D + '@@'
    where answer = 'D'