С точки зрения выяснения того, когда таблица в последний раз изменялась, существует хитрый способ доступа к этой информации, но он не скажет вам, какая строка была изменена, только когда.
SQL Server ведет статистику использования индекса и записывает последние поиски / сканирования / поиска и обновления в индексе. Это также разбивает это по пользователю / системе.
Фильтрация только для пользовательских таблиц, любая вставка / обновление / удаление приведет к обновлению индекса, и DMV обновится с этой новой информацией.
select o.name,
max(u.last_user_seek) as LastSeek,
max(u.last_user_scan) as LastScan,
max(u.last_user_lookup) as LastLookup,
max(u.last_user_update) as LastUpdate
from sys.dm_db_index_usage_stats u
inner join sys.objects o on o.object_id = u.object_id
where o.type = 'U' and o.type_desc = 'USER_TABLE'
group by o.name
Однако это не идеально, куча не имеет индекса для начала - и я никогда не рассматривал его использование для производственного кода в качестве механизма отслеживания, а только в качестве криминалистического инструмента для проверки очевидных изменений.
Если вы хотите надлежащее отслеживание изменений на уровне строк, вам придется либо встроить его, либо взглянуть на особую функцию захвата данных изменений в SQL 2008.