Как реализовать скрипт удаления пустых таблиц в базе MS SQL?
Собственно есть база данных в которой больше 300 таблиц. Скриптом создаются новые.
Через определенное время необходимо проходить и удалять пустые. Можно сделать на T-SQL, но хочется реализовать одним запросом(вложенным). Если плохо гуглил - ткните носом. Спасибо.
select * from (
SELECT
schema_name(o.schema_id) + '.' + o.Name nm,
p.row_count
FROM sys.objects o
INNER JOIN sys.dm_db_partition_stats p
ON (o.object_id = p.object_id)
WHERE
o.type = 'u'
AND p.index_id < 2) tb
where row_count=0
нахожу все таблицы с пустыми записями.
Как удалить таблицы перебором их названий из сформированной запросом таблицы?
CREATE PROCEDURE drop_table
AS
BEGIN
DECLARE @row_count INT
DECLARE @nm VARCHAR (500)
DECLARE @SQL varchar(8000)
DECLARE @CURSOR CURSOR
SET @CURSOR = CURSOR SCROLL
FOR
select * from (
SELECT
schema_name(o.schema_id) + '.' + o.Name nm,
p.row_count
FROM sys.objects o
INNER JOIN sys.dm_db_partition_stats p
ON (o.object_id = p.object_id)
WHERE
o.type = 'u'
AND p.index_id < 2) tb
where row_count=0
OPEN @CURSOR
FETCH NEXT FROM @CURSOR INTO @nm, @row_count
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'drop table ' + @nm
exec(@SQL)
Можете проверять это. Передать внутрь название базы и сущности и удалять если вернулся не NULL. Но я бы разбирался за каким чертом постоянно создаются и удаляются таблицы.
Алгоритм вроде простой:
1. получить перечень всех таблиц из базы
2. отсеять лишние по имени (если требуется)
3. foreach по списку с count ... limit 1
Оформить в виде триггера.