Звучит так, будто вы ищете одностороннюю (только для загрузки) синхронизацию. Для большей надежности я бы попросил продавца (B) добавить столбец ROWVERSION, он немного безопаснее, чем DateTime или DateTimeOffset.
Что касается вашего запроса, я сделал что-то вроде следующего:
INSERT INTO dbo.Table1
(
Field1,
Field2,
Field3
)
SELECT
T1.Field1,
T1.Field2,
T1.Field3
FROM [LinkedServer].[DatabaseName].[dbo].[Table1] T1
WHERE T1.Version > @LastAnchor
Вы можете пропустить всю фазу ETL, если ваши схемы одинаковы, используя CreatedVersion и UpdatedVersion со строками Tombstone для удалений, если это необходимо. Sync Framework многое упрощает для вас, хотя вы можете использовать концепции, чтобы испечь свои собственные относительно легко. Правила следующие:
-- get inserts in dependency order
INSERT INTO ...
SELECT ...
FROM ...
WHERE CreatedVersion > @LastAnchor
-- get updates in dependency order
UPDATE [dbo].[Table1]
SET ...
FROM [LinkedServer].[DatabaseName].[dbo].[Table1] T1
WHERE [dbo].[Table1].[PK] = T1.[PK]
AND T1.CreatedVersion <= @LastAnchor
AND T1.UpdatedVersion > @LastAnchor
-- get deletes (if you need them)
DELETE T
FROM [dbo].[Table1] T
JOIN [LinkedServer].[DatabaseName].[dbo].[Table1_Tombstone] T1
ON T.[PK] = T1.[PK]
AND T1.DeletedVersion > @LastAnchor
Чтобы все эти запросы работали хорошо, столбцы CreatedVersion, updatedVersion и DeletedVersion должны быть проиндексированы.
Вся вышеуказанная логика работает для DateTime или RowVersion, просто RowVersion является более точным, и есть некоторые проблемы, которые SP2 2005 решает в отношении текущих транзакций. В основном, в SQL 2005 с пакетом обновления 2 и SQL 2008 вы устанавливаете максимальную привязку на MIN_ ACTIVE_ROWVERSION () - 1 и запрашивает промежуточные данные. Посмотрите MSDN заметки для получения дополнительной информации о том, почему.
В отличие от некоторых, я настоятельно рекомендовал бы не превращать Updates в кластеризованный индекс, поскольку это будет включать в себя постоянную повторную сортировку данных на страницах после обновления, если вы порекомендуете продавцу выглядеть как дурак.
Одним из преимуществ использования Sync Framework является то, что вы можете использовать WCF для выполнения ваших вызовов данных и выполнять меньшие синхронизации через регулярные промежутки времени вместо массовых в конце каждого дня. Это потребует от поставщика предоставления или, по крайней мере, размещения службы WCF, обеспечивающей доступ к базе данных. Если вы предпочитаете, вы все равно можете использовать связанный сервер с Sync Framework, при этом поддерживая меньшие синхронизации, выполняемые чаще.