Добрий день. Чи можна автоматизувати SQL Запит так, щоб він відпрацьовував кожного дня вночі та очищував дані з таблиці за певну дату створення по формулі "Сьогоднішня дата-10 днів"? Можливо можна зробити такий БП?
DELETE FROM "BtcErrorQueue1C"
WHERE
"CreatedOn" > '2023-10-14'
AND "CreatedOn" < '2023-10-15';
Нравится
Доброго дня,
Так, це можливо зробити через БП. Процес треба запускати через Start timer - рекомендуємо робити такі операції виключно в неробочий час. Сам sql-скрипт (в середині елементу script-task) матиме наступний вигляд:
var userConnection = Get<UserConnection>("UserConnection");
string sql = "DELETE FROM BtcErrorQueue1C WHERE CreatedOn <= DATEADD(day, -9, DATEDIFF(dd, 0, GETDATE())) AND CreatedOn >= DATEADD(day, -10, DATEDIFF(dd, 0, GETDATE()))";
CustomQuery myQuery = new CustomQuery(userConnection);
myQuery.SqlText = sql;
using (DBExecutor dbExecutor = userConnection.EnsureDBConnection())
{
dbExecutor.CommandTimeout = 0;
myQuery.Execute();
}
return true;
Доброго дня,
Дані можно напряму видалити використовуючи елемент БП задача-сценарій, де додати клас який створить такий Delete запит, і додати запуск БП по таймеру на необхідний час. Як саме створити запит через клас описано тут https://academy.terrasoft.ua/docs/developer/back_end_razrabotka/operatsii_s_dannymi_back_end/pryamoj_dostup/obzor#case-2150. Дату теж можно розраховувати отримавши дату що зараз через DateTime localDate = DateTime.Now
Доброго дня,
Так, це можливо зробити через БП. Процес треба запускати через Start timer - рекомендуємо робити такі операції виключно в неробочий час. Сам sql-скрипт (в середині елементу script-task) матиме наступний вигляд:
var userConnection = Get<UserConnection>("UserConnection");
string sql = "DELETE FROM BtcErrorQueue1C WHERE CreatedOn <= DATEADD(day, -9, DATEDIFF(dd, 0, GETDATE())) AND CreatedOn >= DATEADD(day, -10, DATEDIFF(dd, 0, GETDATE()))";
CustomQuery myQuery = new CustomQuery(userConnection);
myQuery.SqlText = sql;
using (DBExecutor dbExecutor = userConnection.EnsureDBConnection())
{
dbExecutor.CommandTimeout = 0;
myQuery.Execute();
}
return true;
Artem Smyrnov,
Добрий день. Дякую, у вашому коді використовуються функції DATEADD
і DATEDIFF
, які використовуються тільки для Microsoft SQL Server, вірно? Мені потрібен код для PostgreSQL, там використовуються функції INTERVAL
та EXTRACT
? Тобто код буде виглядати ось так?
var userConnection = Get<UserConnection>("UserConnection"); string sql = "DELETE FROM BtcErrorQueue1C WHERE CreatedOn <= current_date - interval '9 days' AND CreatedOn >= current_date - interval '10 days'"; CustomQuery myQuery = new CustomQuery(userConnection); myQuery.SqlText = sql; using (DBExecutor dbExecutor = userConnection.EnsureDBConnection()) { dbExecutor.CommandTimeout = 0; myQuery.Execute(); } return true;