SQL Server векторные часы
Существует ли в SQL Server глобальный порядковый номер, который гарантирует периодическое увеличение (даже при регрессии системного времени) и может быть доступен как часть операции вставки или обновления?
2 ответа
Да, вам нужен тип данных rowversion и функция @@dbts.
Этот шаблон маркировки строк с использованием инверсии строк реализован на более низком уровне с помощью функции отслеживания изменений. Который добавляет отслеживание вставки / обновления и удаления, и не требует добавления столбца в таблицу.
Я уверен, что ROWVERSION делает то, что вы хотите. Столбец с типом ROWVERSION гарантированно будет уникальным в любой отдельной базе данных, и, согласно документации SQL, он является не чем иным, как увеличивающимся числом. Если вы просто сохраняете MAX(ROWVERSION) каждый раз, когда заканчиваете обновлять свои данные, вы можете найти обновленные или вставленные строки на следующем этапе обновления, посмотрев на ROWVERSIONs, которые больше, чем сохраненный MAX(). Обратите внимание, что вы не можете поймать удаления таким способом!
Другой подход заключается в использовании LineageId и триггеров. Я рад объяснить этот подход, если он поможет, но я думаю, что ROWVERSION - более простое решение.