怎样建立一个动态表#a,如
declare @sum int 根据@sum来建立一个临时表
若@sum=3,#a就有三个列(a,b,c)
若@sum=4,#a就有四个列(a,b,c,d)

解决方案 »

  1.   

    elect top 100 identity(int) id into #t from sysobjects,syscolumns
    select top 26 char(id+96) f into #field from #t
    declare @sum int,@i int
    select @sum=5,@i=1declare @sql varchar(8000)
    set @sql=''
    --如果你的@sum是个常量,可以直接 select @sql=@sql+','+ f + 'varchar(10)' from #field,而不使用循环
    while @i<=@sum
    select @i=@i+1, @sql=@sql+','+ f + ' varchar(10)' from #field where ascii(f)=96+@i
    set @sql='create table a(' + stuff(@sql,1,1,'') + ')'
    exec(@sql+';select * from a;')
    select * from a
    drop table a
    drop table #t
    drop table #field我这里建的不是临时表.
    如果在exec里建的是#a,很遗憾,由于exec内外部语句编译时不在同一空间,不在同一进程中执行,也即不在一个连接中进行,即便动态建立了#a,你在外部仍无法访问它。
      

  2.   

    由于我这里老掉线,所以是打到记事本再粘的,上面的第一句里少粘了一个s,即第一个为select
      

  3.   

    上面有句错了。
    就是注释的那句,忘加TOP了,如果sum是常量,比如是5的话
    select top 5 @sql=@sql+','+ f + ' varchar(10)' from #field