合并两个表的内容而不复制内容

Bar*_*rka 7 sql t-sql sql-server sql-server-2008

我有两个相同的SQL Server表(SOURCEDESTINATION),每个表都有很多列.我想DESTINATION从表SOURCE中插入表中尚未存在的表行DESTINATION.如果所有列都匹配,除了timestamp,count列和整数主键之外,我定义了两行之间的相等性.所以我想在忽略count,timestamp和主键列的DESTINATION所有行中插入SOURCE不存在的行DESTINATION.

我该怎么做呢?

感谢所有的贡献!我选择使用Merge命令,因为它的结构允许在一个语句中进行更新和插入,我需要单独进行更新.

这是有效的代码:

Merge 
into DESTINATION as D
using  SOURCE as S
on (    
D.Col1 = S.Col1
and D.Col2 = S.Col2
and D.Col3 = S.Col3
)
WHEN MATCHED
 THEN UPDATE SET D.Count = S.Count
 WHEN NOT MATCHED THEN  
        INSERT (Col1, Col2, Col3, Count, timestamp)
        VALUES (S.Col1, S.Col2, S.Col3, S.Count, S.timestamp);
Run Code Online (Sandbox Code Playgroud)

注意:当我第一次写这个问题我叫表AAABBB.我编辑和更改的名称AAA,以SOURCEAND BBBDESTINATION为清楚起见

ric*_*ent 5

像这样的东西:

INSERT INTO BBB(id, timestamp, mycount, col1, col2, col3, etc.)
SELECT id, timestamp, mycount, col1, col2, col3, etc.
   FROM AAA
   WHERE
       NOT EXISTS(SELECT NULL FROM BBB oldb WHERE
          oldb.col1 = AAA.col1
          AND oldb.col2 = AAA.col2
          AND oldb.col3 = AAA.col3
       )
Run Code Online (Sandbox Code Playgroud)

根据需要向NOT EXISTS子句添加列.


Ari*_*ian 5

Select为此目的使用语句,因为Sql Server 2008已过时而不是Select您可以使用Merge语句:

参考:

http://technet.microsoft.com/en-us/library/bb510625.aspx http://weblogs.sqlteam.com/peterl/archive/2007/09/20/Example-of-MERGE-in-SQL-Server -2008.aspx