You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基表新增列的最佳实践咨询及自定义包列丢失问题

哥们,我太懂你时隔多年碰老项目踩坑的崩溃感了!针对你在2017R2版本里遇到的Carrier表新增列发布后被删除的问题,咱们一步步拆解原因、搞定它:

为啥会出现这种情况?

首先得明确:Dynamics AX(现在叫Dynamics 365 Finance & Operations)是元数据驱动的系统——发布或同步数据库时,它会严格以AOT(应用对象树)里定义的表结构为基准,对比数据库实际结构。你当年直接用SQL脚本给Carrier表加的列,根本没在AOT的Carrier表元数据里留下记录,所以系统会把这些列判定为“多余的垃圾数据”,一发布就给你删了。

具体解决步骤

1. 先紧急恢复丢失的列

别慌,先把数据找回来:

  • 立刻暂停相关的发布操作,避免二次删除;
  • 用SQL脚本重新把Carrier表的新增列加回去(一定要先备份数据!):
ALTER TABLE [dbo].[Carrier]
ADD [你的列名1] NVARCHAR(100) NULL,
    [你的列名2] INT NULL;
-- 按需调整列的数据类型、长度、是否允许为空等属性,和之前的结构完全一致

2. 把新增列同步到AOT元数据(关键中的关键)

这一步是让系统“承认”这些列的合法性,以后发布就不会乱删了:

  • 打开AX的开发环境(Visual Studio + Dynamics 365扩展);
  • 在AOT里找到Data Models > Tables > Carrier表;
  • 右键点击Fields节点,根据实际列的类型选择New > String/Int/Date等,创建和数据库里完全匹配的列(列名、数据类型、长度、必填规则都要一模一样);
  • 保存修改后,右键Carrier表选择Synchronize,或者通过发布项目同步数据库——这时候系统会发现AOT和数据库结构一致,不会再删列,反而会把元数据和数据库绑定起来。

3. 清理遗留的旧配置

  • 彻底移除所有之前用来加列的SQL脚本,别让它们留在发布项目里搞事情;
  • 检查有没有通过Post Synchronization Scripts这类配置自动执行SQL的地方,把相关内容也删掉,避免冲突。

4. 验证效果

  • 建个小测试发布项目,只包含Carrier表的修改;
  • 执行发布后去数据库里看Carrier表,确认新增列没被删;
  • 插条测试数据,验证列能正常读写。
给你提个醒

以后绝对别直接用SQL改AX的系统表结构!所有表结构变更都得在AOT里操作,再通过系统的同步/发布流程更新数据库——这是AX的核心规矩,遵守它能少踩无数坑。另外,建议你把老项目里所有当年用SQL直接加的列都挨个核对,补到对应表的AOT元数据里,免得以后再出类似问题。

内容的提问来源于stack exchange,提问作者Jerry Welliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:39:08