Я не уверен, как работает временная база данных, подобная упомянутой marc_s, но если вы используете SQL Server 2008 или более позднюю версию, вы можете воспользоваться его встроенной функциональностью захвата данных (CDC):
Включение CDC использует журнал транзакций репликации для хранения вставок, обновлений и удаленийдля таблицы и создает функции с табличными значениями, которые позволяют извлекать строки по состоянию на заданную дату / время или извлекать только изменения.
Вы не можете полагаться только на CDC, посколькужурнал транзакций станет неуправляемо большим и медленным.Итак, что вы делаете:
- включите CDC,
- создайте таблицу истории, используя ту же схему, что и исходная таблица, но добавив еще пару столбцов для хранения информации о версии строки (значительнокак медленно изменяющееся измерение в реляционной базе данных OLAP) и
- создают задание, которое будет периодически опрашивать функции CDC на наличие изменений с момента его последней загрузки и помещать их в таблицу истории
Затем вы можете использовать таблицу истории в своих запросах, присоединяясь к ней, как обычно, но с дополнительным предикатом (ами), чтобы получить запись «с» любой желаемой даты.