如何在AOT名称中循环包含特定字符的表并删除数据?

时间:2012-12-11 13:42:03

标签: x++ axapta

我想循环遍历名称(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 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

为了加快速度,您可以使用存储过程sp_msforeachtable来循环数据库中的表(检查表名),然后编写delete语句来删除dataAreaId就是您想要的记录。

这样的东西可用于删除CEU公司中以HbcCka开头的表格:

exec sp_msforeachtable '
        if "?" like "HbcCka%"
        delete from ? where DataAreaId = "CEU"
        '