Назад | Перейти на главную страницу

Периодическое обновление таблиц SQL Server 2008

У меня есть SQL Server 2k8 с парой столбцов в нескольких таблицах, заполненных предопределенными данными. Предопределенные данные периодически публикуются третьей стороной в виде файлов MDB / XLS / CSV. Мне нужно применить эти обновления к соответствующим столбцам в таблицах. Простым примером могут быть таблицы для города, штата и почтового индекса, которые заполняются с использованием данных от третьей стороны.

Чтобы периодически обновлять таблицы, я хочу запускать инкрементные обновления, определяя дельту и обновляя только те. Я подумываю написать для этого приложение для Windows.

Есть ли в SQL Server какие-либо инструменты, которые позволяют мне выполнять дельту между двумя таблицами и обновлять только дельту для цели? Помогает ли SSIS каким-либо образом?

Спасибо за прочтение!

Да! В SQL 2008 появилась именно эта команда - команда Merge.

Technet MERGE (Transact-SQL)

Вот пример из статьи выше:

    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)