Для этого можно использовать ключевое слово sys.objects
в SQL Server.
Запрос будет выглядеть примерно так:
USE [Your_Database_Name];
GO
SELECT name AS object_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,create_date
,modify_date
FROM sys.objects
WHERE create_date > GETDATE() - [No_Of_Days_Old]
ORDER BY create_date;
GO
Этот пример, приведенный выше, представляет собой небольшое изменение в первом примере, показанном на странице MSDN, в котором указано ключевое слово sys.objects
( A. Возвращает все объекты, которые были изменены за последние N дней ).
Эту страницу можно найти здесь:
sys.objects (Transact-SQL)
и является отличным ресурсом для множества различных методов запроса «метаданных» объектов вашей базы данных.
Конечно, вышеизложенное просто "ВЫБРАЕТ" имя таблицы, которую необходимо удалить, и фактически не удаляет (или УДАЛЯЕТ) таблицу из вашей базы данных.
Для этого вам понадобится механизм для выдачи команды DROP TABLE
. К сожалению, команда DROP TABLE
не примет имя таблицы со значением параметра (т. Е. Вы не можете сделать DROP TABLE @tablename
), но вы можете создать строку / varchar полного оператора T-SQL и EXECUTE
его).
Чтобы достичь этого, вы можете использовать CURSOR для циклического просмотра результатов предыдущего оператора SELECT
, создав новую команду T-SQL в строке / varchar, которая удалит имя таблицы. Пример этого ниже:
DECLARE @tname VARCHAR(100)
DECLARE @sql VARCHAR(max)
DECLARE db_cursor CURSOR FOR
SELECT name AS tname
FROM sys.objects
WHERE create_date > GETDATE() - 7
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @tname
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'DROP TABLE ' + @tname
--EXEC (@sql)
PRINT @sql
FETCH NEXT FROM db_cursor INTO @tname
END
CLOSE db_cursor
DEALLOCATE db_cursor
Обратите внимание, что в приведенном выше примере я закомментировал строку EXEC (@sql)
. Это строка, которая фактически выполняет оператор T-SQL в переменной @sql, и, поскольку это деструктивная команда, я просто закомментировал ее и вместо нее использовал команду PRINT @sql
(строка ниже). Запустите это как есть, чтобы увидеть, какие таблицы вы, вероятно, удаляете, и, когда вы довольны, раскомментируйте команду EXEC (@sql)
и закомментируйте команду PRINT @sql
!