update Temp_Calc_data
set column1 = Temp_Submit_Data.account
from Temp_Calc_data,Temp_Submit_Data
where Temp_Calc_data.id = Temp_Submit_Data.id and Temp_Submit_Data.mediasort='01'其他以此类推

解决方案 »

  1.   

    和我所能想到的差不多但是执行起来效率会存在严重问题,Temp_Submit_Data中的数据量会到几万,我是希望在执行是不要把Temp_Submit_Data.mediasort='01'写死,最好是能一条语句搞定不要搞6个update要不然以后mediasort这个字段再出现07,08处理起来速度会很受影响
      

  2.   

    可參考
    http://community.csdn.net/Expert/topic/5253/5253943.xml?temp=.5902063
    差不多的例子
      

  3.   

    --用动态SQL
    declare @max varchar(50)
    declare @id int
    declare @str varchar(8000)
    set @id=1
    set @str=''
    select @max=max(mediasort) from Temp_Submit_Data
    while @id<=cast(@max as int)
    begin
      set @str=@str+'
      update Temp_Calc_data set column'+cast(@id as varchar(10))+' = Temp_Submit_Data.account 
      from Temp_Calc_data,Temp_Submit_Data
      where Temp_Calc_data.id = Temp_Submit_Data.id 
    and Temp_Calc_data.submitsort = Temp_Submit_Data.submitsort and Temp_Submit_Data.mediasort=''0'+cast(@id as varchar(10))+''''
      set @id=@id+1
    end
    exec(@str)
    go
      

  4.   

    gc_ding(E.T) 的方法很好100分全给你了,我就是需要这种preparestatement的方法,可以一次提交
      

  5.   

    http://community.csdn.net/Expert/topic/5256/5256011.xml?temp=.3980982
    同一个问题在oracle版上的答复我觉得也相当不错,可以一条语句实现,有兴趣的朋友可以过去瞧瞧,不过sqlserver中好象没有decode这个函数,decode和case差不多的可以用case代替.
    我决定采用gc_ding(E.T) 的方法这样子效率会比较好