有个数据集datatable dt
现在想往表A和B里移动,假设主键为A.a,B.a不存在的话就insert,存在的话就update能用一个sql做出来吗
我现在是dt循环,然后AB分别处理,A的处理要insert,update分开,总觉得会影响速度,所以请大家帮忙指点

解决方案 »

  1.   

    问题1:SQLServer版本多少,2008可以用merge
    问题2:你是想从A移到B还是想从别的表移到A、B两表?
      

  2.   

    回楼上,不好意思1问题描述的不清
    我是从外面取得的dt,要插入到A,B两个表sqlserver2008以上的版本,merge不是从db到db么,我这个数据源是datatable,可以吗
      

  3.   

    merge一般用在表级别的。但是我认为不应该在前端程序中操作过多数据。现在假设你从前端已经获得了一个dt表,可以考虑这样写:begin
    insert into a (需要的列名,如果id是自增就不要写id)
    select * from dt where not exists (select 1 from a where dt.id=a.id)
    insert into b (需要的列名,如果id是自增就不要写id)
    select * from dt where not exists (select 1 from b where dt.id=b.id)update a
    set a.xx=dt.xx --这里是需要更新的列
    from a,dt
    where a.id=dt.idupdate b
    set b.xx=dt.xx --这里是需要更新的列
    from b,dt
    where b.id=dt.id
    end
      

  4.   

    还有一个地方不太明白,我是在C#端取得的datatable,然后调用sql,这里怎么能sql文里的dt来使用?
      

  5.   

    C#的我就不懂了,你可以尝试把datatable先写入到SQLServer 的一个临时表中再处理