动态建立一个临时表的SQL算法

declare @createtemptable varchar(8000)  
  declare @i int  
  declare   @sql   varchar(8000)  
  declare   @Columns   varchar(50) --字段名称  
  declare   @Key varchar(200) --拆分以','隔开的字段  
  declare   @ColumnsType varchar(50) --字段类型  
  declare   @ColumnsTemp as   varchar(4000) --临时表中的列串  
  set   @sql=   'a=float,b=float,c=float,d=float,e=float,f=float'    
  set @Columns=''  
  set @ColumnsType=''  
  set @ColumnsTemp=''  
  set @createtemptable=''  
  set @Key='' --以","隔开的值  
  set @i=charindex(',',@sql)  
  while     @i>0  
  begin  
  --如:a=float  
  set @Key=left(@sql,@i-1)  
  --得到字段名如:a  
  set @Columns=left(@Key,patindex('%[=]%',@Key)-1)  
  --得到数据类型如:float  
  set @ColumnsType=right(@Key,len(@Key)-patindex('%[=]%',@Key)   )  
  set @ColumnsTemp=@ColumnsTemp+char(10)+@Columns+'   '+@ColumnsType+','  
  --下一个字段  
  set @sql=right(@sql,len(@sql)-@i)  
  set @i=charindex(',',@sql)  
  set @Key=''  
  set @Columns=''  
  set @ColumnsType=''  
  end  
  if len(@sql)>0  
  begin  
  --最后一个字符  
  set @Key=@sql  
  --最后一个字段  
  set @Columns=left(@Key,patindex('%[=]%',@Key)-1)  
  --最后一个字段类型  
  set @ColumnsType=right(@Key,len(@Key)-patindex('%[=]%',@Key)   )  
  set @ColumnsTemp=@ColumnsTemp+char(10)+@Columns+'   '+@ColumnsType  
  end  
  set   @createtemptable=@createtemptable+'CREATE     table     #Rec   ('+@ColumnsTemp+')'  
   
  --print     @createtemptable  
   
  exec(@createtemptable+'insert   #Rec   values   (1,2,3,4,5,6)    
  select   *   from   #Rec   ')
posted @ 2009-07-19 02:22  天虎蓝骑士  阅读(251)  评论(0)    收藏  举报