只是一个场景,也许它可以帮助你理解 gordatron 和我在说什么:
以下情况:有一个表“产品”是产品信息的中央存储位置,还有一个表“UpdatedProducts”,其结构看起来与“产品”表完全相同,但数据可能不同。考虑以下场景:您在早上将产品表导出到 excel。您在 Excel 表中删除、添加、更新产品的一整天。在一天结束时,您想将您的 Excel 数据重新导入“产品”表。你需要什么:
- 从“UpdatedProducts”中删除所有记录
- 将数据从 excel 插入“UpdatedProducts”(如果可能,批量插入)
- 更新“产品”表
那么合并语句可能如下所示:
MERGE Products AS TARGET
USING UpdatedProducts AS SOURCE
ON TARGET.ProductID = SOURCE.ProductID
WHEN MATCHED AND TARGET.ProductName <> SOURCE.ProductName OR TARGET.Rate <> SOURCE.Rate
THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName,
TARGET.Rate = SOURCE.Rate
WHEN NOT MATCHED BY TARGET
THEN INSERT (ProductID, ProductName, Rate)
VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE
THEN DELETE
此语句的作用: 匹配时:两个表中都存在数据,如果 ProductName 或 Rate 不同,我们会更新“Products”中的数据
当目标不匹配时:数据存在于暂存表中但不在您的原始表中,我们将它们添加到“产品”
当源不匹配时:原始表中存在数据但暂存表中不存在,您将从“产品”中删除
非常感谢http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/这个完美的例子!