不能这样用,可以把update语句拼成字符串,然后用exec执行,如
declare @sql varchar(1000)
set @sql='update aa set g'+cast(@i as varchar)+'=code where igrade='+cast(@i as varchar)
exec(@sql)

解决方案 »

  1.   

    declare @i int 
    declare @sql varchar(1000)
    set @i=1 
    while (i <=(select max(igrade) from #aa)) 
    begin 
    set @sql='update #aa set  g'+ ltrim(@i)+'=ccode where igrade= '+ltrim(@i)
    exec(@sql) 
    set @i=@i+1 
    end 
      

  2.   

    declare @i int 
    set @i=1 
    while (i <=(select max(igrade) from #aa)) 
    begin 
    exec('update #aa set'+  'g '+cast(@i as varchar(10))+'=ccode where igrade='''+'cast(@i as varchar(10)) ''' )
    set @i=@i+1 
    end 
      

  3.   

    看下面这个(有错误) 
    declare @i int 
    set @i=1 
    while (i <=(select max(igrade) from #aa)) 
    begin 
    update #aa set  'g '+ ' '+@i+ ' '=ccode where igrade= ' '+@i+ ' ' 
    @i=@i+1 
    end 
    表中有g1,g2,g3.....字段 
    当@i=1时,我要修改g1的值,@i=2时,我要修改g2的值..... 
    大家帮我看看错在哪里
    ------------------------
    declare @i int 
    declare @j int 
    declare @sql as varchar(100)
    set @i=1 
    select @j = max(igrade) from #aa
    while @i <= @j
    begin
      set @sql = 'update #aa set g' + cast(@i as varchar) + '=ccode where igrade=' + cast(@i as varchar)
      exec(@sql)
      set @i = @i + 1
    end如果igrade是字符串型
      set @sql = 'update #aa set g' + cast(@i as varchar) + '=ccode where igrade=''' + cast(@i as varchar) + '''
      

  4.   

    谢谢大家,方法都差不多,不过还有一个问题
    declare @i int
    declare @sql varchar(1000)
    set @i=1
    set @sql=''
    while (@i<=(select max(igrade) from #aa))
    begin
    set @sql= 'update #aa set g '+cast(@i as varchar)+ '=code where igrade= '+cast(@i as varchar) 
    exec(@sql)
    set @i=@i+1
    end
    ----max(igrade)=4
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: '1' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: '2' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: '3' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: '4' 附近有语法错误。
      

  5.   

    上面问题解决,产生新问题
    code是其中的一个字段
    上面的语句得到的code如下
    update #aa set g3=code where igrade= 3
    code 应该是字段code的值
      

  6.   

    --不好意思,少写了个asdeclare @i as int  
    declare @j as int  
    declare @sql as varchar(100) 
    set @i=1  
    select @j = max(igrade) from #aa 
    while @i  <= @j 
    begin 
      set @sql =  'update #aa set g ' + cast(@i as varchar) +  '=ccode where igrade= ' + cast(@i as varchar) 
      exec(@sql) 
      set @i = @i + 1 
    end 如果igrade是字符串型 
      set @sql =  'update #aa set g ' + cast(@i as varchar) +  '=ccode where igrade= ' ' ' + cast(@i as varchar) +  ' ' ' 
      

  7.   

    declare @i int,@maxi int,@sql varchar(8000) 
    select @i=1,@sql='',@maxi=max(igrade) from #aa 
    while (@i<=@maxi) 
    begin
      set @sql=@sql+' update #aa set g'+rtrim(@i)+'=ccode where igrade='+rtrim(@i)
      exec(@sql) 
      set @i=@i+1 
    end 
      

  8.   

    呵呵,有日子混也不错阿
    加我的MSN:[email protected]
      

  9.   

    我还没有申请MSN,你的我记下了.
    你现在在哪做事?是在软件公司吗
      

  10.   

    sorry ,我的exec(@sql)本来是要放到end 后的
      

  11.   

    sdhylj 
    青锋 
    等 级:
     发表于:2007-10-11 09:52:2019楼 得分:0 
    呵呵,开始联络感情了. 
     
    -----------
    青锋老兄,我和他以前是同事,刚去公司上班时,newzzq帮了我不少忙