Как я могу перебрать таблицы, которые содержат определенные символы в имени AOT, и удалить данные?

Я хочу перебрать несколько таблиц, где имя (aotName) начинается с 'HbcCka', наконец, я хочу удалить все данные из таблиц.

Теперь мне нужна логика для очистки таблиц. Как мне этого добиться?

ОБНОВЛЕНО:

static void tstDeleteForecastingData(Args _args)
{
    Dictionary  dictionary = new Dictionary();
    int         i;
    SysDictTable    dictTable;
    ;
    for (i=1 ; i<=dictionary.tableCnt() ; i++)
    {
        if (strScan(tableid2name(dictionary.tableCnt2Id(i)), "HbcCka", 1, strLen(dictionary.tableName(i))))
        {
            info(strfmt('%1;%2', dictionary.tableCnt2Id(i), tableid2name( dictionary.tableCnt2Id(i) )));
        }
    }

}

2 ответа

Решение

Усекать таблицы во всех компаниях?

Используйте Администрирование системы \ Периодические \ Базы данных \ Администрирование SQL, отметьте таблицы, затем выберите Действия таблицы \ Обрезать.

Или создайте класс с помощью основного метода сервера:

ClassDeclaration tstDeleteForecastingData
{
}
static server void main(Args _args)
{
    Dictionary  dictionary = new Dictionary();
    int         i;
    for (i=1 ; i<=dictionary.tableCnt() ; i++)
    {
        if (strScan(tableid2name(dictionary.tableCnt2Id(i)), "HbcCka", 1, 99)))
        {
            info(strfmt('%1;%2', dictionary.tableCnt2Id(i), tableid2name( dictionary.tableCnt2Id(i) )));
            new SqlDataDictionaryPermission(methodstr(SqlDataDictionary, tableTruncate)).assert();
            new SqlDataDictionary().tableTruncate(dictionary.tableCnt2Id(i), false);
            CodeAccessPermission::revertAssert();
        }
    }

}

Если только в текущей компании:

Common table = new DictTable(<tableId>).makeRecord();
table.skipDeleteMethod(true);
table.skipDeleteAction(true);
delete_from table;

Чтобы ускорить процесс, вы можете использовать хранимую процедуру sp_msforeachtable для зацикливания таблиц в базе данных (с проверкой имен таблиц) и просто написать свой оператор delete для удаления записей, где именно dataAreaId - тот, который вам нужен.

Примерно так можно использовать для удаления таблиц, начинающихся с HbcCka в компании CEU:

exec sp_msforeachtable '
        if "?" like "HbcCka%"
        delete from ? where DataAreaId = "CEU"
        '
Другие вопросы по тегам