WinXP, MS SQL 2008R2 Express, имеется база данных, состоящая из одной таблицы dbo.Statistic, (модель Simple, autogrowth отключен).
Задача - контролировать размер таблицы, и удалять самые старые записи, если размер больше предельного.
Решение:
Периодически вызываю макрос на VBA, где создаю коннекцию к базе и:
1. Определяю размер таблицы
2. Удаляю записи, относящиеся самому последнему дню, если размер слишком большой.
Вроде всё должно работать. Но вопросы такие, хотелось бы упростить решение:
1. Можно ли создать процедуру/функцию в SQL Server Management Studio, чтобы она периодически (раз в час например) вызывалась, и выполняла эти действия средствами T-SQL и SQL Server, обойдясь без VBA. Или вызывать её с помощью Windows scheduler. Я никогда не создавал пользовательские процедуры или функции...(
2. SQL запрос для определения размера таблицы слишком наворочен, нет? Я просто нашел готовый универсальный запрос и адаптировал его под себя.
Спасибо.
Задача - контролировать размер таблицы, и удалять самые старые записи, если размер больше предельного.
Решение:
Периодически вызываю макрос на VBA, где создаю коннекцию к базе и:
1. Определяю размер таблицы
автор |
---|
SELECT SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id WHERE t.NAME LIKE 'Statistic' AND i.index_id <= 1 GROUP BY t.NAME |
2. Удаляю записи, относящиеся самому последнему дню, если размер слишком большой.
автор |
---|
"DELETE FROM dbo.statistic WHERE dateandtime BETWEEN (SELECT MIN(dateandtime) FROM dbo.statistic) AND (SELECT MIN(dateandtime) FROM dbo.statistic) + 1" |
Вроде всё должно работать. Но вопросы такие, хотелось бы упростить решение:
1. Можно ли создать процедуру/функцию в SQL Server Management Studio, чтобы она периодически (раз в час например) вызывалась, и выполняла эти действия средствами T-SQL и SQL Server, обойдясь без VBA. Или вызывать её с помощью Windows scheduler. Я никогда не создавал пользовательские процедуры или функции...(
2. SQL запрос для определения размера таблицы слишком наворочен, нет? Я просто нашел готовый универсальный запрос и адаптировал его под себя.
Спасибо.