【发布时间】:2017-04-12 19:38:18
【问题描述】:
我在 Microsoft SQL Server 2014 上有两个具有相同列的表。
MainTable 和 TempTable。
我想将 TempTable 中的更新/新鲜数据输入到 MainTable 中,避免重复。
MainTable 如下所示:
TempTable 如下所示:
TempTable 中的数据会不断变化。它可能已更新数据或新行。
我想要实现的是,将数据从 TempTable 插入/更新到 MainTable。
TempTable: - 在此示例中,Numbr 101 和 104 的行包含更新的数据。它还有带有 Numbr 105 和 106 的新行。我想更新101和104的数据,同时插入105和106。
由于我是 SQL 新手,请提供建议。
更新1:
使用以下查询后:
--Insert New
INSERT INTO MAINTABLE
SELECT A.*
FROM
TempTable as A
LEFT JOIN MainTable as B
ON B.Number = A.Number
WHERE B.Number IS NULL
--Update Old
UPDATE A
SET A.Number = B.Number,
A.Name = B.Name,
A.LastActive = B.LastActive,
A.Country = B.Country
FROM
TempTable as A
LEFT JOIN MainTable as B
ON B.Number = A.Number
WHERE B.Number IS NOT NULL
MainTable的输出:
它有效,但是当 TempTable 中的数据更新并添加新数据时:
运行查询后的结果:
分别是MainTable和TempTable
添加了新的第 108 行(来自 TempTable --> MainTable),但更新后的第 106 行无效,并且 TempTable 中的值是从 MainTable 复制的。
【问题讨论】:
-
查看 MERGE 语句(阅读整个页面,但您可以浏览“使用 MERGE 插入和更新”以获得更快的答案):technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx
-
102和103呢?
-
@BaconBits 他们可能会也可能不会改变。这只是一个示例,我有数百行。
-
@pmbAustin 合并并没有真正奏效。
-
@Tango 对,但是当 102 和 103 存在而 TempTable 没有 102 和 103 时,MainTable 会发生什么?记录是否从 MainTable 中删除?它们是否保留在 MainTable 中?
标签: sql sql-server database sql-server-2014