2

我有桌子 AZ。表 A 有 PK 的 ID,所有其他表都有与表 A 的 ID 相关的字段。

我的任务是进行代码清理,我需要将 TableA 的 ID 从长度 30 更改为 20。我已经完成了其他表 BZ 以及升级代码单元。但是当我尝试更改 TableA 时,我收到此错误:

"是与以下主键相关的更改,可能会导致新表中的数据丢失。这些更改无法处理,因为更改表的 TableSyncSetup 类型函数的 TableUpgradeMode 设置为 Copy,不会将数据复制到新表表。要解决此问题,您必须将 TableUpgradeMode 选项更改为 Move,然后将 C/AL 代码添加到升级类型函数以处理新表数据。

错误是什么意思?我是否需要将 TableA 的升级代码单元从 TableSyncSetup.Mode::Copy 更改为 ::Move?有什么指导吗?

我正在使用 Dynamics NAV 2016。

4

1 回答 1

1

是的,您必须将模式更改为“移动”,但您还必须创建一个新表,该表临时保存已减少字段长度的字段中的数据。由于字段长度减少,您还必须处理可能的数据截断问题。

但我会以不同的方式(升级工具包中的旧方式)执行此操作: - 创建一个具有相同字段长度(30)的新表,复制字段内容并清除字段(使用代码单元) - 更改字段长度,但当 NAV 询问同步模式时选择强制(因为您知道这些字段中没有数据 - SQL 可以删除并重新创建列) - 使用第二个代码单元将数据复制回缩减的字段 - 处理截断

我希望它有帮助

于 2015-12-10T14:05:40.000 回答