Мне нужно обновить базу данных контактов в SQL Server с изменениями в удаленной базе данных (также SQL Server, на другом сервере в той же локальной сети). Я не могу внести никаких изменений в удаленную базу данных, которая является коммерческим продуктом. Я подключен к удаленной базе данных с помощью связанного сервера. Обе таблицы содержат около 200 тыс. Строк.Как я могу эффективно сравнивать свои данные с удаленной базой данных?
Моя логика в этот момент очень прост: [упрощенный псевдо-SQL следует]
/* Get IDs of new contacts into local temp table */
Select remote.ID into #NewContactIDs
From Remote.Contacts remote
Left Join Local.Contacts local on remote.ID=local.ID
Where local.ID is null
/* Get IDs of changed contacts */
Select remote.ID into #ChangedContactIDs
From Remote.Contacts remote
Join Local.Contacts local on remote.ID=local.ID
Where local.ModifyDate < remote.ModifyDate
/* Pull down all new or changed contacts */
Select ID, FirstName, LastName, Email, ...
Into #NewOrChangedContacts
From Remote.Contacts remote
Where remote.ID in (
Select ID from #NewContactIDs
union
Select ID from #ChangedContactIDs
)
Конечно, делая эти объединения и сравнения над проволокой меня убивает. Я уверен, что есть лучший способ - совет?
Не плохая идея - из любопытства, где бы вы храните lastCompareTimestamp? –
Возможно, в новой таблице в локальной базе данных. Возможно, излишний, но он дает вам всегда доступное и легко обновляемое местоположение. –