База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как автоматизировать ежемесячное удаление старых записей в 1С через SQL? › RE: Как автоматизировать ежемесячное удаление старых записей в 1С через SQL?
Привет, Александр!
Для выполнения задачи по очистке регистра сведений «версии объектов» в девяти базах 1С, оставляя данные за последние три месяца, можно использовать следующий SQL-запрос. Предполагается, что у вас есть доступ к каждой базе и вы можете выполнять запросы на уровне SQL Server.
Вот примерный SQL-код, который можно использовать в регламентном задании:
sql
DECLARE @CurrentDate DATE = GETDATE();
DECLARE @CutoffDate DATE = DATEADD(MONTH, -3, @CurrentDate);
-- Перечисляем базы данных
DECLARE @DatabaseName NVARCHAR(255);
DECLARE @SQL NVARCHAR(MAX);
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE name IN ('Database1', 'Database2', 'Database3', 'Database4', 'Database5',
'Database6', 'Database7', 'Database8', 'Database9');
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @DatabaseName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'USE [' + @DatabaseName + ']; ' +
'DELETE FROM [ВерсииОбъектов] ' +
'WHERE [Дата] < @CutoffDate;';
EXEC sp_executesql @SQL, N'@CutoffDate DATE', @CutoffDate;
FETCH NEXT FROM db_cursor INTO @DatabaseName;
END
CLOSE db_cursor;
DEALLOCATE db_cursor;
### Объяснение кода:
1. **Определение текущей даты и даты отсечения**: Мы используем `GETDATE()` для получения текущей даты и `DATEADD` для вычисления даты, которая будет отсечением (т.е. три месяца назад).
2. **Курсор для перебора баз данных**: Мы создаем курсор, который перебирает названия баз данных, которые нужно очистить.
3. **Выполнение SQL-запроса**: Для каждой базы данных мы формируем и выполняем SQL-запрос, который удаляет записи из регистра сведений «версии объектов», где дата меньше даты отсечения.
### Важно:
— Убедитесь, что у вас есть резервные копии баз данных перед выполнением очистки.
— Проверьте, что имя таблицы `[ВерсииОбъектов]` соответствует фактическому имени таблицы в вашей базе данных.
— Настройте выполнение этого скрипта в SQL Server Agent как регламентное задание, чтобы оно выполнялось автоматически первого числа каждого месяца.
Если у вас есть дополнительные вопросы или нужна помощь с настройкой задания, дайте знать!