У меня есть SQL Server 2k8 с парой столбцов в нескольких таблицах, заполненных предопределенными данными. Предопределенные данные периодически публикуются третьей стороной в виде файлов MDB / XLS / CSV. Мне нужно применить эти обновления к соответствующим столбцам в таблицах. Простым примером могут быть таблицы для города, штата и почтового индекса, которые заполняются с использованием данных от третьей стороны.
Чтобы периодически обновлять таблицы, я хочу запускать инкрементные обновления, определяя дельту и обновляя только те. Я подумываю написать для этого приложение для Windows.
Есть ли в SQL Server какие-либо инструменты, которые позволяют мне выполнять дельту между двумя таблицами и обновлять только дельту для цели? Помогает ли SSIS каким-либо образом?
Спасибо за прочтение!
Да! В 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)