我想循环遍历名称(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) )));
}
}
}
答案 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"
'