Как я могу перебрать таблицы, которые содержат определенные символы в имени 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"
'