如果它们的结构不完全相同,我可以合并SQL Server表吗?

时间:2016-01-11 11:01:31

标签: sql sql-server merge

我有两个表,sourcetarget

source

+--------+------+-------------+
|  Name  | Year |    City     |
+--------+------+-------------+
| Toyota | 2002 | Los Angeles |
| Seat   | 2012 | Madrid      |
+--------+------+-------------+

target

+----+---------+------+----------+
| ID |  Name   | Year |   City   |
+----+---------+------+----------+
|  1 | Bentley | 1969 | Budapest |
|  2 | Toyota  | 1988 | New York |
|  3 | Ford    | 2001 | Tokyo    |
|  4 | Seat    | 1995 | Madrid   |
|  5 | Bugatti | 1995 | London   |
+----+---------+------+----------+

我想将source合并到target。我知道MERGE命令,没关系。问题是source没有列ID,因此无法匹配。

由于两者中的Name列都是唯一的,我只需要匹配它们是否相等,如果不存在则插入目标,如果存在更新目标。

我可以使用NOT EXIST语句来完成它,但我们正在谈论数十亿行,因此MERGE将是一个更快的解决方案。

我可以以某种方式设置MERGE命令,以便在匹配时仅考虑该列吗?

1 个答案:

答案 0 :(得分:3)

是的,你可以:

MERGE target t
USING source s
  ON t.name = s.name
WHEN NOT MATCHED 
  INSERT (Name, Year, City)
  VALUES (s.Name, s.Year, s.City)
WHEN MATCHED THEN
  UPDATE SET Year = s.Year,
             City = s.City;

如果目标中的ID列不是IDENTITY列,您可以创建序列来填充它。