我的源表中有多少列 这里就得写多少列!  可是我的源表中有几万列呢?也要我一一写出来?  笑话 
-----------
弱弱地说一下,
MS SQL SQL基表最大支持列数为1024.
其次,如果说是几万列,
真的是数据表设计上的问题,
不会出现几万列这种状况的 :)

解决方案 »

  1.   

    和尚好脾气呵呵
    借宝地问一下和尚:
    求个帖子的地址,好像是说有表
    nid  sid    bank
    -----------------
    1    1      NULL
    2    1      1
    ...
    求取同SID的第一笔不为NULL的记录的?谢谢了。 
      

  2.   

    首先楼主
    你设计的表 有问题
    才引起了后面一大堆问题你可以把你的需求贴出来,
    我们可以帮你的设计你可以先设计一个CLASS 表 保存主要信息
    在建立一个CLASS_details保存详细信息这样就可以视线横向分表
      

  3.   

    我的表是从EXCEL导到SQL2005中的  当初学生登记时是先登记到EXCEL中的  表的结构不是我说了算的饿  哎   失望 及其滴失望...
      

  4.   

    http://topic.csdn.net/u/20080718/17/80ea941b-5be2-4414-ac44-27d5ac0cb67b.html
      

  5.   


    这个没关系 你可以在DTS、SSIS时 进行转换转换时选择字段可以先到临时表
      

  6.   

    哎 啥都不说了  这又不是什么歌德巴赫猜想 我就纳闷了  是 那个列不会超出1024  但是即使到了100 还要人一一的列举出来?
    还有  班级数到了100  下面的那SLECET语句也要写到100?  就没个省事点的算法?
    奇了怪了!
      

  7.   


    --这个是动态列的例子,
    --也就是根据你表里面多少列然后产生出来的.
    drop table class
    go
    -->生成测试数据
    drop table #
    go 
    create table CLASS([Class] nvarchar(4),[Student1] nvarchar(1),[Student2] nvarchar(1),[Student3] nvarchar(1))
    Insert CLASS ([Class],[Student1],[Student2],[Student3])
    select N'数学1班',N'A',N'B',N'C' union all
    select N'数学2班',N'D',N'Q',N'P' union all
    select N'英语1班',N'E',N'D',N'H' union all
    select N'英语2班',N'J',N'K',N'Q' union all
    select N'历史班',N'A',N'D',N'H' union all
    select N'政治班',N'A',N'D',N'H' union all
    select N'专业班',N'J',N'K',N'Q'declare @i int,@cnt int,@sql nvarchar(max) 
    select @cnt = max(column_id) from sys.columns where object_id =object_id(N'CLASS')
    create table # ([Class] nvarchar(4),[st] nvarchar(1))
    select @i=2,@sql=' '  
    while @i<=@cnt
    begin
        if @i >2  select @sql = @sql + ' UNION ALL  ' 
        select  @i = @i + 1 ,@sql = @sql + ' Select [class],'+[name]+' as st from CLASS ' from sys.columns where object_id =object_id(N'CLASS') and column_id =@i    
    end
    set @sql = @sql + ''
    --print @sql
    insert into # exec(@sql)  select @i=1,@cnt=max(cnt),@sql ='' from ( select st,count(1) cnt from # group by st)a
    while @i <=@cnt
    begin
       set @sql = @sql + ', max(case when px='+ltrim(@i)+' then class else '''' end) as class'+ltrim(@i) + '  '
       set @i = @i +1
    end
    set @sql = ' select st '+ @sql + ' from ( select px=(select count(1) from # where st=t.st and class<=t.class),* from # t )b  group by st'
    --print @sql
    exec (@sql)
    /*
    st   class1 class2 class3 class4
    ---- ------ ------ ------ ------
    A    历史班    数学1班   政治班    
    B    数学1班                 
    C    数学1班                 
    D    历史班    数学2班   英语1班   政治班
    E    英语1班                 
    H    历史班    英语1班   政治班    
    J    英语2班   专业班           
    K    英语2班   专业班           
    P    数学2班                 
    Q    数学2班   英语2班   专业班       
    */