我有桌子A-Z。表A具有ID的PK,并且所有其他表具有与TableA的ID相关的字段。
我的任务是执行代码清理,我需要将TableA的ID从长度30更改为20.我已经为其他表B-Z以及升级代码单元做了。但是当我尝试更改TableA时,我收到此错误:
"与以下主键相关的更改可能导致新表中的数据丢失。无法处理更改,因为已更改的表的TableSyncSetup类型函数的TableUpgradeMode设置为Copy,而不会将数据复制到新表。要解决此问题,必须将TableUpgradeMode选项更改为Move,然后将C / AL代码添加到Upgrade类型函数以处理新表数据。"
错误是什么意思?我是否需要将TableA的升级代码单元从TableSyncSetup.Mode :: Copy更改为:: Move?有什么指导吗?
我正在使用Dynamics NAV 2016。
答案 0 :(得分:1)
是的,您必须将模式更改为“移动”,但您还必须创建一个新表,该表会暂时保留您减少字段长度的字段中的数据。由于字段长度减少,您还必须处理可能的数据截断问题。
但我会以不同的方式(升级工具包的旧方法)执行此操作: - 创建一个具有相同字段长度(30)的新表,复制字段内容并清除字段(使用代码单元) - 更改字段长度,但在NAV询问同步模式时选择强制(因为您知道这些字段中没有数据 - SQL可以删除并重新创建列) - 使用第二个代码单元将数据复制回缩减字段 - 处理截断
我希望它有所帮助