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,你在外部仍无法访问它。
由于我这里老掉线,所以是打到记事本再粘的,上面的第一句里少粘了一个s,即第一个为select
上面有句错了。 就是注释的那句,忘加TOP了,如果sum是常量,比如是5的话 select top 5 @sql=@sql+','+ f + ' varchar(10)' from #field
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,你在外部仍无法访问它。
就是注释的那句,忘加TOP了,如果sum是常量,比如是5的话
select top 5 @sql=@sql+','+ f + ' varchar(10)' from #field