今日遇到一个要将数字连接成字符串的问题,原理如下:declare @sql varchar(500)
declare @num int
set @num=6
while (@num<=10)
   begin
      set @sql=isnull(@sql + ',' , '') +'['+@num+']'  //本句报错,不能将[转换为int
      set @num=@num+1
   end
print @sql需要得到的结果:[6],[7],[8],[9],[10] ,请教该怎么写才能达到这个要求?

解决方案 »

  1.   

    set @sql=isnull(@sql + ',' , '') +'['+@num+']'
    改为
    set @sql=isnull(@sql + ',' , '') +'['+CONVERT(VARCHAR(20),@num)+']'
      

  2.   

    加类型转换函数即可.declare @sql varchar(500)
    declare @num int
    set @num=6
    while (@num<=10)
      begin
      set @sql=isnull(@sql + ',' , '') +'['+convert(varchar,@num)+']' 
      set @num=@num+1
      end
    print @sql-->
    [6],[7],[8],[9],[10]
      

  3.   

    declare @sql varchar(500),@num int
    set @num=6
    while(@num<10)
    begin
      set @sql=isnull(@sql+',','')+'['+cast(@num as varchar(100))+']'
      set @num=@num+1
    end
    print @sql 
      

  4.   


    declare @sql varchar(500)
    declare @num int
    set @num=6
    while (@num<=10)
      begin
      set @sql=isnull(@sql + ',' , '') +'['+ltrim(@num)+']' --本句报错,不能将[转换为int
      set @num=@num+1
      end
    print @sql
      

  5.   


    declare @sql varchar(500)
    declare @num int
    set @num=6
    while (@num<=10)
      begin
      set @sql=isnull(@sql + ',' , '') +'['+ltrim(@num)+']'
      set @num=@num+1
      end
    print @sql
    /*
    [6],[7],[8],[9],[10]
    */
      

  6.   

    set @sql=isnull(@sql + ',' , '') +'['+@num+']'
    改为
    set @sql=isnull(@sql + ',' , '') +'['+CONVERT(VARCHAR(20),@num)+']'
      

  7.   


    declare @sql varchar(50)
    select @sql=isnull(@sql+',','')+'['+ltrim(number)+']' from master..spt_values
    where number between 6 and 10 and type='p'select @sql 
    /*
    [6],[7],[8],[9],[10]
    */