TbCard 表结构如下,CardCode和CardNum为主键。
 CardCode             varchar(10)          not null default '',
 CardNum              varchar(10)          not null default '',
 OtherInfo1           varchar(10)          not null default '',
 OtherInfo2            varchar(10)          not null default '',
同时,我建一个相同结构的临时表#Temp_TbCard我要实现这样的功能,把临时表中的数据保存到TbCard中,如果临时表中的CardCode和CardNum在tbCard中存在,则更新 OtherInfo1和 OtherInfo2.
否则如果临时表中的CardCode和 CardNum在tbCard中不存在,则插入该行数据到TbCard。

解决方案 »

  1.   

    update TbCard
    set OtherInfo1=t.CardCode ,OtherInfo2=t.CardNum
    from TbCard inner join #Temp_TbCard t on TbCard.CardCode=t.CardCode
    and TbCard.CardNum=t.CardNum
    insert into TbCard
    select *
    from #Temp_TbCard a
    where not exists (select 1 from TbCard b where a.CardCode=b.CardCode and a.CardNum=b.CardNum) 
      

  2.   

    如果是SQL SERVER 2008或者之上的版本可以用merge实现。
    如果是之前版本可能要写两条语句,INNER JOIN的UPDATE, LEFT JOIN没有数据的INSERT
      

  3.   

    感谢!能否顺便给个Oracle的写法?
      

  4.   

    oracle 写法,参考:http://www.cnblogs.com/highriver/archive/2011/08/02/2125043.html
      

  5.   

    oracle 写法,参考:http://www.cnblogs.com/highriver/archive/2011/08/02/2125043.html
      

  6.   

    请问,我还是用update 和 insert 而不用 merge 
    那么上面的sql语句同样也适用于oracle对吗?
      

  7.   

    请问,我还是用update 和 insert 而不用 merge 
    那么上面的sql语句同样也适用于oracle对吗?请问,我还是用update 和 insert 而不用 merge 
    那么上面的sql语句同样也适用于oracle对吗?merge我不知道oracle有没有,但是update和insert一定有,我那个好像是标准sql,你没试过吗?
      

  8.   

    请问,我还是用update 和 insert 而不用 merge 
    那么上面的sql语句同样也适用于oracle对吗?请问,我还是用update 和 insert 而不用 merge 
    那么上面的sql语句同样也适用于oracle对吗?merge我不知道oracle有没有,但是update和insert一定有,我那个好像是标准sql,你没试过吗?
    谢谢啦