#sql-server #database #ssms #database-administration
#sql-server #База данных #ssms #администрирование базы данных
Вопрос:
Могу ли я каким-либо образом реализовать следующую идею, используя T-SQL:
У меня есть запуск скрипта, который идентифицирует таблицы, находящиеся в настоящее время в базе данных, и их соответствующие подсчеты строк, как показано ниже:
SELECT o.name AS 'TableName' ,i.rows AS 'Records'
FROM sys.tables as o LEFT JOIN sys.sysindexes as i
ON i.id = o.object_id
WHERE o.type IN ('U')
AND i.indid in (0,1)
Но я хотел бы настроить что-то, где я мог бы отмечать любые новые таблицы, которые появляются в базе данных (вроде как вчера или сегодня), а также любые, которые были недавно удалены. Почти действует как «история журнала таблиц».
Таким образом, конечным результатом будет список всех текущих таблиц новых удаленных (со вчерашнего дня).
Заранее приветствую.
Комментарии:
1. Вредные привычки: использование объединений в старом стиле — этот стиль списка таблиц, разделенных запятыми , в старом стиле был заменен на правильный
JOIN
синтаксис ANSI в стандарте SQL ANSI- 92 ( более 20 лет назад), и его использование не рекомендуется2. Также: начиная с SQL Server 2005 , вам следует прекратить использование
sysobjects
представления — используйте сфокусированное представление каталога вsys
схеме, напримерsys.tables
илиsys.types
3. вы запрашиваете количество удаленных таблиц в том же формате, что и у вас
4. Спасибо, изменил соединение и перенаправил на более подходящие таблицы, как было предложено.
Ответ №1:
Вы можете определить, sys.objects
когда таблица была создана или изменена ( create_date
, modified_date
), но я думаю, что вам не повезло с этой точки зрения в отношении удаленных таблиц.
Этот вид аудита лучше всего обрабатывается триггерами DDL. Вы можете создать подобную таблицу dbo.ddl_change_log
и заполнить ее триггером DDL.