关于SQLserver的字符串怎么转换为表的列名的问题

  最近学了下数据库,为了练习下T-SQL,也是为了管理班级的需要,有所有课程学生绩点(S#,姓名,课程名。。。)与学生每门课程绩点(S#,课程,绩点)两个表,我先将数据统计于表一中,由于有时从第一个表向第二个表插入些个别数据时,或者更新些数据时有点麻烦,于是就想能不能一步完成,我就摸索创建了个存储过程,完成了目标。

T-SQL如下:

CREATE procedure [dbo].[add_gpa] @姓名 char(20),@课程 char(20),@绩点 float as
declare @学号 char(20)
begin 
select @学号=a.S# from 学生所有信息 a where a.Sname=@姓名      //从学生信息表中通过姓名获得学号
select @学号
exec('update 所有课程学生绩点  set '+@课程+ '='+ @绩点+ ' where S#='+@学号)
update 学生每门课程绩点 set gpa=@绩点 where S#=@学号 and subject= @课程
end

GO

   实质上,困难点就在怎么将字符串变为列名,经过尝试后用exec(),可以解决这个问题,网上搜到的解决方案。

SQL code
?

1
2
3
declare @column varchar(10)
set @column='D15'
exec ('select '+@column=' from Hp_KQ_KqMX

   

   后来,我发现@变量不不仅在exec()中可以为列名,也可以为字符串如我写的exec()内的语句。

   但是这种存储过程还不是最好的解决方法,我想创建一个触发器,这样就不用输入参数这么麻烦了,有那位大佬看了我的博客后,能给晚辈留言指导,感激不尽。



猜你喜欢

转载自blog.csdn.net/black_szy/article/details/79344527