【问题标题】:Error with upgrade codeunit when changing table's PK length更改表的 PK 长度时升级代码单元出错
【发布时间】:2015-12-08 11:40:36
【问题描述】:

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

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

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

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

我正在使用 Dynamics NAV 2016。

【问题讨论】:

  • 如果是这样,可能是您在表 A 中有一条 ID 长度大于 20 的记录?

标签: microsoft-dynamics navision dynamics-nav dynamics-nav-2016


【解决方案1】:

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

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 2019-02-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多