我有两表
A表
xx    yy    zz    
---------------
11    22    33
66    77    88
……B表
xx   yy    zz     ww     aa
---------------------------
43   75    39     44    55
99   44    22     99    00
……要求结果输出表
xx    yy     zz   ww     aa
---------------------------
11    22     33   44     55
66    77     88   99     00
……也就是把B表中存在而A表不存在的“列”插入A表  并且“不改变”原A表中的数据
这种操作需要经常操作  把B表中存在而A表不存在的列插入A表  
值得注意的是B表比A表多几列是“不固定”的  也许多1列  也有可能多很多列
求高手帮忙  小生感激涕零

解决方案 »

  1.   

    你是要更改原来的表,还是只要查询结果??
    我觉得你可以预留字段?比如15个字段,b表字段少的话,你就空其他列
    update b set b.xx=a.xx,set b.yy=a.yy,b.zz=a.zz from b,a 
    现在的b表其实就是你要的结果了,如果你要更改a表,还不如直接重建a表
      

  2.   

    B表中的数据是行转列而来的  现在B表和A表的行数是相同的  但是列数不相同  我要用B表中的数据更新A表  但是不能改变原来A表的数据
    因为A表和B表相差几列不能固定 所以azhhuoiu的方法也不可取  谢谢
      

  3.   

    giftzheng(爱多VCD,我们一直在努力) 
    没有对应关系  因为A表和B表行数相同  只要添加进去就可以了 
    如果确实需要关系  
    可以在A表B表中填入一ID列  问题依旧A表
    id   xx    yy    zz    
    ---------------
    1    11    22    33
    2    66    77    88
    ……B表
    ID  xx   yy    zz     ww     aa
    ---------------------------
    1   43   75    39     44    55
    2   99   44    22     99    00
    ……要求结果输出表
    ID   xx    yy     zz   ww     aa
    ---------------------------
    1    11    22     33   44     55
    2    66    77     88   99     00
    ……也就是把B表中存在而A表不存在的“列”插入A表  并且“不改变”原A表中的数据
    这种操作需要经常操作  把B表中存在而A表不存在的列插入A表  
    注意“A表和B表相差几列不能固定” 
    求高手帮忙  小生感激涕零
      

  4.   

    A表
    id   xx    yy    zz    
    ---------------
    1    11    22    33
    2    66    77    88
    ……B表
    ID  xx   yy    zz     ww     aa
    ---------------------------
    1   43   75    39     44    55
    2   99   44    22     99    00
    ……要求结果输出表
    ID   xx    yy     zz   ww     aa
    ---------------------------
    1    11    22     33   44     55
    2    66    77     88   99     00
    ……
    select a.*,b.zz,b.ww,b.aa
     from a join b on a.id=b.id
      

  5.   

    最重要的是注意“A表和B表相差几列不能固定” 
    要求能动态实现把B表中存在而A表不存在的“列”插入A表  并且“不改变”原A表中的数据 哪个大虾可以帮我 谢谢大家
    帮忙顶顶
    让此问题早日解决 
    谢谢大家了
      

  6.   

    只是简单的替换,
    select * into #tmp from b
    update #tmp
    set xx=a.xx,yy=a.yy,zz=a.zz
    from #tmp,A where #tmp.id=A.id
    select * from #tmp
      

  7.   

    再加上处理#tmp的语句
    if object_id(tempdb..#tmp) is not null drop table #tmp
    select * into #tmp from b
    update #tmp
    set xx=a.xx,yy=a.yy,zz=a.zz
    from #tmp,A where #tmp.id=A.id
    select * from #tmp
    drop table #tmp
      

  8.   

    谢谢  cxmcxm(小陈) 兄  这个思路很好  我以前没有想到但是这个方法仍然不可取
    因为我的数据量很庞大(作为测试我只把A表设计成了3列,实际上A表有300多列呢)  而且保存起来的数据会越来越多,所以不可能这样去实现.况且这样执行起来无疑是把查询执行了2遍  
    这样执行时间会很长
    刚才我试了一下
    用在批处理中  完全执行下来要15分钟  这样很恐怖啊
    我想把时间控制在5分钟左右