现在表TB的数据是最新的,要用TB的数据去更新表TA的数据,应该如何写SQL? 
--
update a
set a.col = b.col
from ta a
left join tb b
on a.id = b.id

解决方案 »

  1.   

    现在我的想法是先要判断TB和TA有哪些相同字段,用TB的字段依次去判断是否在TA中有相同字段,然后再更新, 取出TB的字段,判断在TA中的存在性,若存在,按照ID更新, 能否写出动态SQL语句呢? ---应该可以 
      

  2.   

    update a
    set a.col = b.col
    from ta a
    left join tb b
    on a.id = b.id出现列名 'col' 无效。
      

  3.   


    可以写成动态语句。
    首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新
    i=LEN(TB)
    @sql = ''
    While i>0
    begin
    @sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作  go'
    i++
    end
      

  4.   


    可以写成动态语句。
    首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新
    i=LEN(TB)
    @sql = ''
    While i>0
    begin
    @sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作  go'
    i++
    end
      

  5.   


    可以写成动态语句。
    首先取出TB中的每一条记录,然后通过这条记录的字段与TA中的比较,如果相同更新
    i=LEN(TB)
    @sql = ''
    While i>0
    begin
    @sql+='if exists(select 1 from TA WHERE 字段1=' +select top (i) 字段1 from tb+ ' and 字段2=' +select top (i) 字段2+ ') 更新操作  go'
    i++
    end
      

  6.   

    可以的,我打了很多字,竟然提交不上去,字白打了,真是郁闷呀!!CSDN真是垃圾,不止一次出现这样的事情了
      

  7.   

    列出TB表字段 select name from syscolumns where id=object_id('TB')再怎么办呢?
      

  8.   

    create table ta(id int,col1 int, col2 int)
    create table tb(id int,col1 int,col2 int)
    insert ta select 1,1,1
    insert ta select 2,3,1insert tb select 1,3,3
    insert tb select 2,1,5
    godeclare @s varchar(8000)
    select @s = 'update a set '
    select @s = @s + 'a.['+name+']= b.['+name+'],'
    from syscolumns 
    where id = object_id('tb') and name <> 'id'select * from ta
    set @s = left(@s,len(@s) - 1)
    exec ( @s+' from ta a left join tb b on a.id = b.id')
    select * from ta
    drop table ta,tb
    /*id          col1        col2        
    ----------- ----------- ----------- 
    1           1           1
    2           3           1(所影响的行数为 2 行)
    (所影响的行数为 2 行)id          col1        col2        
    ----------- ----------- ----------- 
    1           3           3
    2           1           5(所影响的行数为 2 行)*/
      

  9.   

    INSERT INTO v_purchase/*源表*/ (receiptid,buydate,posid,payee,totalamount,totaldiscount)/*目标表字段*/
           SELECT serialno,sdate,posno,cshcode,total,change/*源表字段*/
           FROM total/*源表*/