Вместо использования дат можно использовать Отслеживание изменений , чтобы идентифицировать все ключи, измененные с момента последнего обновления, даже удаленные. Эта функция доступна во всех версиях и выпусках с 2005 года, даже в Express.
Работа с отслеживанием изменений (SQL Server) показывает, как можно извлечь любые изменения, внесенные в таблицу со времени последней синхронизацииоперация.
Этот запрос вернет все измененные строки и причину, по которой они были изменены из таблицы Product
, начиная с версии, указанной в last_synchronization_version
. Любые удаленные строки появятся с D
в поле SYS_CHANGE_OPERATION
:
SELECT
CT.ProductID, P.Name, P.ListPrice,
CT.SYS_CHANGE_OPERATION, CT.SYS_CHANGE_COLUMNS,
CT.SYS_CHANGE_CONTEXT
FROM
SalesLT.Product AS P
RIGHT OUTER JOIN
CHANGETABLE(CHANGES SalesLT.Product, @last_synchronization_version) AS CT
ON
P.ProductID = CT.ProductID
Версия синхронизации, которую вы будете использовать для следующей итерации, должна быть получена до выбора изменений. Вы можете получить его с помощью:
SET @synchronization_version = CHANGE_TRACKING_CURRENT_VERSION();
Этот запрос очень быстрый, потому что он объединяет первичные ключи таблицы.
Еще одна приятная вещь в том, что вам все равно, если вы забудете его запустить - он все равно будет извлекать все изменения с момента последнего выполнения. Более частый запуск приводит к повышению производительности, поскольку в запросе меньше возвращаемых изменений.