如何在动态Ax表SSIS中插入recId?
答案 0 :(得分:5)
答案 1 :(得分:3)
如果要使用SSIS将记录直接插入SQL数据库,则无法在运行中轻松地从SQL操作中轻松获取RecId,因此另一个选项是在x ++作业或服务中使用x ++保留recid,例如:
static void ReserveRecs(Args _args)
{
systemSequence seq;
seq = new SystemSequence();
if (seq)
{
// Suspend automatic recId allocation.
Seq.suspendRecIds(tableName2id("TableName"));
//Change the number below to reflect the amount of recid's you want reserved.
info(int642str(seq.reserveValues(1, tableName2id("TableName"))));
Seq.removeRecIdSuspension(tableName2id("TableName"));
}
}
此作业将采用一个表,并保留一个系统将忽略/跳过的recId。需要注意的是,如果你意外地保留了一个庞大的数字,那么恢复这些预订并不容易,而int64确实有一个限制(尽管数量巨大)。
您可以在x ++中创建一个服务,您可以从SSIS作业中获取一个服务,在该作业中您可以告诉表名和保留金额,然后返回int64,这样就可以自动执行SSIS作业。
答案 2 :(得分:0)
在这篇文章中解释了如何维护Number Sequence表以插入RecId,尽管这是一个危险的操作,必须始终避免它。
http://sumitsaxfactor.wordpress.com/2011/04/01/handling-recids-in-sql-server/