表名为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 输出设备 控制器 显示器 键盘
number answer question A B C D
1 B 问题1 1945年 1946年 1948年 1952年
2 D 问题2 主机 外设 CPU 硬件
3 B 问题3 输出设备 控制器 显示器 键盘
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
--用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
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
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'