1

我想遍历几个名称(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) )));
        }
    }

}
4

2 回答 2

2

截断所有公司的表?

使用 System Administration\Periodic\Databases\SQL Administration,标记表,然后选择 Table actions\Truncate。

或者使用服务器主方法创建一个类:

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;
于 2012-12-11T15:45:30.993 回答
0

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

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

exec sp_msforeachtable '
        if "?" like "HbcCka%"
        delete from ? where DataAreaId = "CEU"
        '
于 2012-12-15T23:14:39.373 回答