SQL实现表的动态查询

 一、事例:如果对一个大学生三年成绩的查询通过学生学号,学生成绩按学期存放在不同的表中,成绩表如下:

    cjxx20051 也就是存放学生2005年第一学期的成绩:

    cjxx20052 也就是存放学生2005年第二学期的成绩:

     cjxx20061 也就是存放学生2005年第一学期的成绩:

    cjxx20062 也就是存放学生2005年第二学期的成绩:

    cjxx20071 也就是存放学生2005年第一学期的成绩:

   cjxx20072  也就是存放学生2005年第二学期的成绩:

二、问题,写一个存储过程,要求根据学号查到此学生三年的各科成绩汇总

--创建存储过程---
ALTER    proc [dbo].[GetByCjByxh]
--参数xh
@xh int

as
----print @xh
---变量声明
declare @year int
set @year=2005
-----创建临时表#temptable用于存放学生成绩信息
create table #temptable(kch varchar(20),xnd int,xq int,fs int,bkcj int)

declare @nowYear int
set @nowYear=year(getdate())
while @year<=@nowYear
begin
declare @xq int
set @xq=1
while @xq<=2
begin
  -- declare @cjxxTable1 char(9)
    
    -- set @cjxxTable1='"cjxx'+cast(@year as char(4))+'1"'
     ------声明变量·cjxxTable动态用于标记各年成绩表
     declare @cjxxTable char(9)
    
     set @cjxxTable='cjxx'+cast(@year as char(4)) +cast(@xq as char(1))--此语句第一次执行为cjxx20051,二
    
      --print  @cjxxTable
     if exists(select name from sysobjects where name=@cjxxTable and type='U')--判断表cjxxTable是否存在
      BEGIN
       declare @sqlstr nvarchar(1000)
       SET @sqlstr='insert into #temptable(kch,xnd,xq,fs,bkcj) select kcbh,'+cast(@year as char(4))+','+cast(@xq as char(1))+',cj,bkcj from '+@cjxxTable+' where xh='+cast(@xh as char(8))
        ---执行语句
        exec sp_executesql @sqlstr
        print @sqlstr
  end
  set @xq=@xq+1
 end
 set @year=@year+1
end

select * from #temptable

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值