declare @sql varchar(8000)
set @sql = 'select 姓名,年级,班级'select name into #t 
from syscolumns 
where id = object_id('表') 
      and name like '%(2)%'  --找第二学期update #t
set @sql = @sql + ','+rtrim(name)set @sql = @sql + ' from 表'drop table #texec(@sql)不过,还是不好。表设计不合理。

解决方案 »

  1.   

    1: 你的表結構設計得不很理想2:關於字段名的問題你可以用以下方法  exec('select 英语(' + cast(2 as varchar(2)) + ') from yourTable')3:你的第二問不太明白
      

  2.   


    declare @sql nvarchar(4000)
    declare @i int
    set @i=1--第一学期set @sql='select 姓名,年级,班级,'select @sql=@sql+name+',' from syscolumns where id=object_id('main') and name like '%('+rtrim(@i)+')'set @sql=left(@sql,len(@sql)-1)+' from main'exec(@sql)我觉得还是改表结构好.这样设计表不大合理
      

  3.   

    你采用的main数据库结构不是很合理,最好调整一下,这样使用很不方便。
      

  4.   

    他妈的,我打了那莫多怎莫不显示,气死我了,接上面.
    英语(1) 英语(2) 英语(3) 英语(4) 高数(1) 高数(2) 历史(3) ....
    90      80      82             60      52      76
    课程后数字为学期数,由于学生采用选修,所以每个学生所学课程可能不一样,
    要求能通过姓名或年级或班级或学期查询?
    (1)能否对字段采取变量 select *1) from main 查出第一学期成绩?
    (2)由于所选字段是随机的,空值不选,怎样将字段名与数据对应起来?
      

  5.   

    我想,因为你的字段中有“年纪”,那么按照年纪查询应该是不难了,无非是加一个where语句(where [年纪]=99),而要按照班级查询,也是可以同样处理的。
    如果说要按照学期查询,肯定是不能够用select *1) from main 来查询了,至少我是没有听说过。不过,你可以再使用一个表,用来存储main中所有的字段以,这样你就可以首先通过那个字段表检索得到某个学期所有的字段(甚至几个学期的),然后就可以从main中查询数据了。
    其实,我并不觉得main这样的结构合理,而且我对“系中总课程数是固定的”这句话不是很理解,当然也许你有更多的实际的理由。
      

  6.   

    Chiff(~o~) :一定是你抄我的!
     skyearth(sky) :改表结构,别无他法!