Процесс проверки наличия новых / удаленных таблиц в базе данных

#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.