低版本环境导入高版本bacpac触发timestamp列插入错误求助
解决跨版本Dynamics 365 Finance bacpac导入的timestamp列触发器错误
针对你在10.0.38开发环境导入10.0.40 UAT的.bacpac时遇到的FINTAG_INSTEADOFINSERTTRIGGER第41行错误(提示Cannot insert an explicit value into a timestamp column,含SQL72014、SQL72045错误码),微软支持给出了以下经过验证的解决方案:
方案1:修改bacpac包中的触发器定义
- 将目标.bacpac文件重命名为.zip并解压
- 打开解压后的
model.xml文件,搜索FINTAG_INSTEADOFINSERTTRIGGER的触发器脚本 - 删除INSERT语句中对
RECVERSION(timestamp类型列)的显式赋值代码段 - 将修改后的文件重新打包为.bacpac格式,再执行原SqlPackage导入命令
方案2:导入前后临时禁用触发器
- 在本地10.0.38环境中预先创建空的
AxDB2数据库 - 执行SQL命令禁用目标触发器:
DISABLE TRIGGER FINTAG_INSTEADOFINSERTTRIGGER ON FINTAG; - 重新运行你的SqlPackage导入命令:
C:\sqlpackage-win-x64-en-162.3.566.1> ./SqlPackage.exe /a:import /sf:C:\Backup\dbbackup.bacpac /tsn:localhost /tdn:AxDB2 /ttsc:true /p:CommandTimeout=1200 - 导入完成后,执行命令重新启用触发器:
ENABLE TRIGGER FINTAG_INSTEADOFINSERTTRIGGER ON FINTAG;
方案3:使用匹配版本的SqlPackage工具
- 替换当前使用的SqlPackage为与10.0.38开发环境版本匹配的工具(可从对应版本的Dynamics安装介质的Support目录获取)
- 导入命令中添加
/p:IgnoreExtendedProperties=true参数,绕过版本差异导致的触发器属性校验
该问题本质是Dynamics 365 Finance 10.0.40版本的FINTAG表触发器逻辑,与10.0.38版本的timestamp列(rowversion)处理规则不兼容——高版本触发器包含了对timestamp列的显式插入操作,而低版本环境不允许此类操作。
内容的提问来源于stack exchange,提问作者Zia Ur Rehman
相关产品推荐
相关产品推荐

