Мне очень трудно ответить на этот вопрос моим коллегам, иногда мы вносим изменения в таблицу, и мы не знаем, кто или когда был изменен, у меня есть этот запрос, но иногда он не совсем точен.
SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'MYDB') --DB Name
AND OBJECT_ID=OBJECT_ID('MyTable') --Table Name
есть ли другой точный способ ответить на этот вопрос?
Если это было достаточно недавно, оно все еще может быть зафиксировано в скользящем трассировка по умолчанию:
DECLARE @path NVARCHAR(260);
SELECT
@path = REVERSE(SUBSTRING(REVERSE([path]),
CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT
LoginName,
HostName,
StartTime,
ObjectName,
TextData
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 164 -- Object:Altered
AND EventSubClass = 1
ORDER BY StartTime DESC;
Если нет, то, возможно, пришло время инвестировать в DDL-триггеры, контроль версий/управление изменениями, не давать всем вашим коллегам достаточно прав для изменения базы данных или во все вышеперечисленное...
SQL Server не отслеживает эти данные. Вы можете посмотреть на комбинацию триггеров DML, аудита SQL, отслеживания изменений, сбора измененных данных, Временные таблицы. Ваш выбор будет зависеть от вашей версии и выпуска SQL Server, объема данных, которые меняются, и отслеживание каких таблиц вам нужно...