从[MYHR].[dbo].[hv_kqsk]表
__sno __user     __time        Zgbh     Zgxm    Bmbh Bmmx     Sksj            Sbbh 
5  1   2012.09.27 15:25  000006  陈海英   0111 装配课  2012.09.09 09:09  0     
6        1   2012.09.27 15:19  000006  陈海英   0111 装配课  2012.10.10 10:10  0      
7  1   2012.09.27 15:19  000007  吴小红   0111 装配课  2011.11.11 11:11  0      
8  1   2012.09.28 08:58  000006  陈海英   0111 装配课  2012.12.12 12:12  0 
INSERT 到 [HSHR].[dbo].[hv_kqsk] 已经有三条数据如下
__sno __user     __time        Zgbh     Zgxm    Bmbh Bmmx     Sksj            Sbbh 
1  1   2012.09.27 15:25  000006  陈海英   0111 装配课  2012.09.09 09:09  0     
2        1   2012.09.27 15:19  000006  陈海英   0111 装配课  2012.10.10 10:10  0      
3  1   2012.09.27 15:19  000007  吴小红   0111 装配课  2011.11.11 11:11  0
现在我想用一个INSERT 把MYHR这个数据库的表数据插入到HSHR这个数据库中来.sksj和zgbh重复的就不要插入,没有重复的就插入.__sno是自增长的列.
求高手解答一下.

解决方案 »

  1.   

    思路就是:
    insert 目标表
    select *
    from 表(可能也是目标表或者其他表) a 
    where not exists (select 1 from 目标表 b where a.主键=b.主键)
      

  2.   

    INSERT TB(除SNO 的所有列 ) SELECT 除SNO 的所有列 FROM TA A WHERE NOT EXISTS(SELECT 1 FROM TB WHERE sksj=A.sksj AND zgbh=A.zgbh)
      

  3.   

     大哥,你很牛,你的是对的.我想知道SELECT 1 这个是什么意思?
      

  4.   

    如果是2008的话可以用MERGE语句。
      

  5.   

    我的和2楼的有什么区别,你自己没看懂而已,77只是把语句写的更详细.....算了,我的你都看不懂,merge会看死你的。
      

  6.   

    有可能就是一点点的区别.谢谢你了,大哥,能解释下这个SELECT 1是什么意思么? 跟
    INSERT INTO  [HSHR].[dbo].[hv_kqsk]  (zgbh,sksj,sbbh,skbz,sim,msec)
    SELECT zgbh,sksj,sbbh,skbz,sim,msec FROM [MYHR].[dbo].[hv_kqsk]
    WHERE  NOT EXISTS
    (SELECT zgbh,sksj,sbbh,skbz,sim,msec FROM [HSHR].[dbo].[hv_kqsk] WHERE sksj=[MYHR].[dbo].[hv_kqsk].sksj AND zgbh=[MYHR].[dbo].[hv_kqsk].zgbh)这个的区别在哪?
      

  7.   

    我只是没把列名和主键写清楚而已。exists只返回true/false,所以无论你里面是select * /select 1/select 10000都是一样的,但是select *还要计算表中的每个列是否都有,而select1就是是否存在,少检查了一些,性能会稍微好一点。至于select 100000,那完全就是标新立异了。