+1 用于推荐 MERGE,因为这是一种可以在单个语句中处理两个实例的正确方法。如果您不熟悉它,可以运行两个单独的语句(UPDATE/INSERT)。
对于更新:
如果您想根据您加入的任何键不相等的任何列进行更新,则相当简单。您可以从任一表中获取所有列的列表(最简单的方法是右键单击该表并选择 TOP 1000)。
突出显示列并按 Shift + Tab 并使用 CTRL + F 删除所有逗号,全部替换。将其复制并粘贴到 Excel 的 A 列中。
在 B 列中插入以下公式:
B1:="T1."&A1&" <> T2."&A1&","
B2:="OR T1."&A2&" = T2."&A2&","
将 B2 中的公式复制并粘贴到列表的下方。所以:
UPDATE T1
SET T1.Column1 = T2.Column1
,T1.Column2 = T2.Column2
,T1.Column3 = T2.Column3
,T1.Column4 = T2.Column4
FROM Table1 T1
INNER JOIN Table2 T2
ON T1.Table1PrimaryKey = T2.Table2PrimaryKey
WHERE T1.Column1 <> T2.Column1
OR T1.Column2 <> T2.Column2
OR T1.Column3 <> T2.Column3
OR T1.Column4 <> T2.Column4
注意:因为如果任何列组合不匹配,所有被比较的列都会被更新,那么你就可以了,因为更新匹配的列不会有任何损害。而且,如果您正在实施一个缓慢变化的维度来跟踪日期变化,那么更新的日期仍然有效,因为至少有 一个 列记录不匹配并因此被更新。
对于插入:
INSERT INTO Table1 (Column1, Column2, Column3, Column4)
SELECT T2.Column1
,T2.Column2
,T2.Column3
,T2.Column4
FROM Table2 T2
WHERE T2.Table2PrimaryKey NOT EXISTS (SELECT T1.Table1PrimaryKey FROM Table1 T1)
ORDER BY T2.Table2PrimaryKey
注意:上面的 INSERT 假设您的 PrimaryKey 列是 IDENTITY 列,因为它是自动计算的,所以不能插入。如果您使用的主键不是 IDENTITY 字段,则需要将其包含在 INSERT 子句中。此外,ORDER BY 将按照 PRIMARY KEY 的顺序插入记录。这在 PRIMARY KEY 是 IDENTITY 字段时很有用,因为计算的值至少会按照它的来源顺序排列。如果所有 INSERTS 都使用此方法,并且目标表仅从接收表接收记录,并且没有任何 RESEED 或删除,则 IDENTITY 主键列值将相同。