MERGE dbo.Weiboinfo AS Target
USING (SELECT * FROM dbo.hj2) AS Source
ON (Target.mid = Source.mid)
WHEN NOT MATCHED BY TARGET THEN
    INSERT (
        Target.id,
Target.text,
Target.create_at,
Target.mid,
Target.source,
Target.CommentsCount,
Target.RepostsCount,
Target.Klass,
Target.originText
) VALUES (
Source.product_id, Source.product_type_id, Source.name,
Source.description, Source.price
);
对应了微软官方的语法模式,但是语法解析总是错误,用的是SQL2005

解决方案 »

  1.   

    MERGE dbo.Weiboinfo AS Target 
    USING (SELECT * FROM dbo.hj2) AS Source --此处(SELECT * FROM dbo.hj2)直接换成dbo.hj2
    ON (Target.mid = Source.mid) 
    WHEN NOT MATCHED BY TARGET --此处可省略BY TARGET
    THEN    INSERT 
    (Target.id,Target.text,Target.create_at,Target.mid,Target.source,     Target.CommentsCount,Target.RepostsCount,Target.Klass,Target.originText ) 
    VALUES ( Source.product_id, Source.product_type_id, Source.name, Source.description, Source.price ); 另外merge是2008出来的很好用的功能哦。2005不支持的
      

  2.   

    WHEN NOT MATCHED BY TARGET THEN改成WHEN NOT MATCHED BY Source THEN试试
      

  3.   

    貌似insert 语句有问题
    INSERT (         Target.id,     Target.text,     Target.create_at,     Target.mid,     Target.source,     Target.CommentsCount,     Target.RepostsCount,     Target.Klass,     Target.originText ) --9个VALUES ( Source.product_id, Source.product_type_id, Source.name, Source.description, Source.price   --5个
      

  4.   

    merge 是SQLserver2008 里新加的,在05里应该用不了
      

  5.   

    那现在想把一个表并到另外一个里面,目的表比较大,怎么处理(SQL2005的平台)
      

  6.   

    先把要更新的数据查出来,放到CTE里面,然后再insert进去。你这个是想把数据追加进去是吧?
      

  7.   

    是要追加进去,CTE的作用是个临时表吧,这样会不会很慢里,要加进去的那个表有100万左右的数据,要加进去的那个表有8万多
      

  8.   

    如果你的逻辑较为简单的话,用下面的大概格式:
    insert into 目标表
    select xxxxx
    from 来源表 a
    where not exists (select 1 from 目标表 b where a.主键=b.主键)