Вопрос

Автоматизація SQL запиту

Добрий день. Чи можна автоматизувати SQL Запит так, щоб він відпрацьовував кожного дня вночі та очищував дані з таблиці за певну дату створення по формулі "Сьогоднішня дата-10 днів"? Можливо можна зробити такий БП?

 

DELETE FROM "BtcErrorQueue1C"

WHERE

  "CreatedOn" > '2023-10-14'

    AND "CreatedOn" < '2023-10-15';

Нравится

3 комментария
Лучший ответ

Доброго дня,

 

Так, це можливо зробити через БП. Процес треба запускати через 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&lt;UserConnection&gt;("UserConnection");
string sql = "DELETE FROM BtcErrorQueue1C WHERE CreatedOn &lt;= current_date - interval '9 days' AND CreatedOn &gt;= 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;

 

Показать все комментарии