Bar*_*rka 7 sql t-sql sql-server sql-server-2008
我有两个相同的SQL Server表(SOURCE和DESTINATION),每个表都有很多列.我想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)
注意:当我第一次写这个问题我叫表AAA和BBB.我编辑和更改的名称AAA,以SOURCEAND BBB来 DESTINATION为清楚起见
像这样的东西:
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子句添加列.
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
| 归档时间: |
|
| 查看次数: |
7954 次 |
| 最近记录: |