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 を使用してデータベース内のテーブルをループし (テーブル名をチェックして)、delete ステートメントを記述して、dataAreaId が目的のレコードであるレコードを削除します。

次のようなものを使用して、CEU 会社の HbcCka で始まるテーブルを削除できます。

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