我有一台 SQL Server 2k8,其中几张表中有几列填充了预定义数据。预定义数据由第三方定期发布为 MDB/XLS/CSV 文件。我需要将这些更新应用于表中的相应列。一个简单的例子是,有城市、州和邮政编码的表格,这些表格使用来自第三方的数据进行填充。
为了定期更新表格,我想通过确定增量并仅更新增量来运行增量更新。我正在考虑编写一个 Windows 应用程序来执行此操作。
SQL Server 中是否有任何工具允许我计算两个表之间的差异并仅将差异更新到目标上?SSIS 有任何帮助吗?
谢谢阅读!
答案1
是的!SQL 2008 引入了 Merge 命令。
以下是上述文章中的一个例子:
USE AdventureWorks;
GO
-- Create a temporary table variable to hold the output actions.
DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20));
MERGE INTO Sales.SalesReason AS Target
USING (VALUES ('Recommendation','Other'), ('Review', 'Marketing'), ('Internet', 'Promotion'))
AS Source (NewName, NewReasonType)
ON Target.Name = Source.NewName
WHEN MATCHED THEN
UPDATE SET ReasonType = Source.NewReasonType
WHEN NOT MATCHED BY TARGET THEN
INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)
OUTPUT $action INTO @SummaryOfChanges;
-- Query the results of the table variable.
SELECT Change, COUNT(*) AS CountPerChange
FROM @SummaryOfChanges
GROUP BY Change;
如果您不想插入来自外部源且不存在于内部数据中的记录,请删除:
WHEN NOT MATCHED BY TARGET THEN
INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)