Подтвердить что ты не робот

Дата последнего изменения в SQL Server

Один из моих коллег говорит, что SQL Server сохраняет дату и время последней модификации в "скрытом столбце" в каждой записи. Я почти уверен, что он сказал что-то не так. Можете ли вы подтвердить это мне?

4b9b3361

Ответ 1

Как намекают другие, ваш коллега должен говорить тарабарщину или ссылаться на что-то другое. Структура на диске для записи или страницы для этого не содержит ссылок на время последнего обновления. Хотя вы можете найти информацию о последнем обновлении на уровне объекта, такая информация недоступна на уровне записи/строки.

Ответ 2

Нет скрытого столбца, поддерживаемого для каждой строки, которая содержит дату/время последней модификации. Также нет столбца, содержащего идентификатор пользователя, выполнившего такое изменение, и не существует столбец, который идентифицирует, что было сделано последним изменением (вставка или обновление).

Если вам нужна какая-либо из этих функций, вы должны их реализовать. Для некоторых пользователей каждый последний бит служебных данных может иметь для них значение, поэтому наличие скрытых функций (со скрытыми затратами) не будет приемлемым.

Ответ 3

Из Pinal Dave, есть DMV, который вы можете использовать для получения этой информации. Ваш коллега может ссылаться на TIMESTAMP для измененной строки, но насколько я знаю, он только утверждает, что если вы попросите его, явно добавив столбец этого типа.

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'AdventureWorks')
AND OBJECT_ID=OBJECT_ID('test');

Ответ 4

Если вы хотите узнать, когда была обновлена ​​определенная строка, вы должны сохранить столбец timestamp "LastUpdated" в таблице и обновить ее при каждом UPDATE (например, автоматически через триггер)

Ответ 5

Когда была обновлена ​​последняя запись, и кто ее обновил, можно сохранить, добавив последний столбец со значением по умолчанию GetDate(). Последнее имя пользователя обновления является сложным, поскольку ваше приложение, скорее всего, использует общее соединение с базой данных. Имя пользователя можно заполнить, добавив его как настройку ко всем процедурам вставки и обновления и передаче учетных данных AD, SSO или учетных записей - что имеет смысл для вашего метода проверки подлинности.

Последний столбец обновления является настолько полезным и необходимым, что он должен быть включен как набор параметров для базы данных или, по крайней мере, таблицы. Зачем? Попробуйте получить эту информацию без нее, после того, как этот факт был введен (подсказка, если у вас есть поле идентификации - оно может "помочь", но может быть ненадежным).