基于比较值通过 X++ 复制列值
Copy column values via X++ based on comparing values
目前我有 3 tables.
KEV_PackTable
KEV_Persons
HcmWorkerRecId
我正在逐步淘汰 KEV_Persons table,它目前有一个关系:
Kev_PackTable.PersonId -> KEV_Persons.PersonId
我想使用 HcmWorker table 而不是这个 table,建立关系:
Kev_PackTable.HcmWorker_RecId -> HcmWorker.RecId
如果KEV_PackTable.Personid与HcmWorker.PersonnelNumber的值相同,则在table的HcmWorker_RecId列中填入该行的RecId:KEV_PackTable.
与其说是AX2012问题,不如说是查询题,但是找不到Personid匹配PersonnelNumber值时填写RecId的解决方法
我认为我的 SQL 陈述必须是:
UPDATE KEV_PackTable
SET HcmWorkerRecId = HcmWorker.RecId
FROM KEV_PackTable
JOIN HcmWorker
ON KEV_PackTable.PersonId = HcmWorker.PersonnelNumber
如何在 X++ 中 运行 这个查询?我是否以 select forUpdate 语句开始?
如果我做对了,那么这段代码应该适合你使用 update_recordset 这样你就有机会执行批量更新
KEV_PackTable packTable;
HcmWorker hcmWorker;
;
update_recordset packTable
setting HcmWorkerRecId = hcmWorker.RecId
join firstOnly RecId from hcmWorker
where hcmWorker.PersonnelNumber == packTable.PersonId;
另一种解决方案是像这样使用 while select forUpdate
KEV_PackTable packTable;
HcmWorker hcmWorker;
;
ttsbegin;
while select forUpdate packTable
join firstOnly RecId from hcmWorker
where hcmWorker.PersonnelNumber == packTable.PersonId
{
// ttsbegin;
packTable.HcmWorkerRecId = hcmWorker.RecId;
packTable.update();
// ttscommit;
}
ttscommit;
有了这个,您可以 - 根据您的需要 - 切换到多个较小的交易(通过注释掉外部 ttsbegin
/ttscommit
并使用内部交易)这可能会增加总执行时间,但可能会导致更少的阻塞会话。
目前我有 3 tables.
KEV_PackTable KEV_Persons HcmWorkerRecId
我正在逐步淘汰 KEV_Persons table,它目前有一个关系:
Kev_PackTable.PersonId -> KEV_Persons.PersonId
我想使用 HcmWorker table 而不是这个 table,建立关系: Kev_PackTable.HcmWorker_RecId -> HcmWorker.RecId
如果KEV_PackTable.Personid与HcmWorker.PersonnelNumber的值相同,则在table的HcmWorker_RecId列中填入该行的RecId:KEV_PackTable.
与其说是AX2012问题,不如说是查询题,但是找不到Personid匹配PersonnelNumber值时填写RecId的解决方法
我认为我的 SQL 陈述必须是:
UPDATE KEV_PackTable
SET HcmWorkerRecId = HcmWorker.RecId
FROM KEV_PackTable
JOIN HcmWorker
ON KEV_PackTable.PersonId = HcmWorker.PersonnelNumber
如何在 X++ 中 运行 这个查询?我是否以 select forUpdate 语句开始?
如果我做对了,那么这段代码应该适合你使用 update_recordset 这样你就有机会执行批量更新
KEV_PackTable packTable;
HcmWorker hcmWorker;
;
update_recordset packTable
setting HcmWorkerRecId = hcmWorker.RecId
join firstOnly RecId from hcmWorker
where hcmWorker.PersonnelNumber == packTable.PersonId;
另一种解决方案是像这样使用 while select forUpdate
KEV_PackTable packTable;
HcmWorker hcmWorker;
;
ttsbegin;
while select forUpdate packTable
join firstOnly RecId from hcmWorker
where hcmWorker.PersonnelNumber == packTable.PersonId
{
// ttsbegin;
packTable.HcmWorkerRecId = hcmWorker.RecId;
packTable.update();
// ttscommit;
}
ttscommit;
有了这个,您可以 - 根据您的需要 - 切换到多个较小的交易(通过注释掉外部 ttsbegin
/ttscommit
并使用内部交易)这可能会增加总执行时间,但可能会导致更少的阻塞会话。