部署至SQL Server 2019后SSIS脚本任务报VSTA15.0格式迁移失败错误
SSIS包抛出
Failed to migrate scripts contained in the package to the VSTA 15.0 format错误排查方案 错误核心原因
该错误本质是VSTA(Visual Studio Tools for Applications)脚本格式版本不匹配:
- SQL Server 2012绑定VSTA 11.0格式脚本
- Visual Studio 2015 SSDT开发的SSIS包默认生成VSTA 14.0格式脚本
- SQL Server 2019的SSIS运行时要求VSTA 15.0格式脚本,部署/运行时自动迁移旧格式脚本失败就会抛出该错误,和包内业务逻辑无关。
按优先级排查解决
- 方案1:在匹配版本的开发环境重编译所有脚本(解决80%以上同类问题)
VS2015自带的SSDT最高仅支持目标版本到SQL Server 2017,无法生成适配SQL Server 2019的VSTA 15.0格式脚本,必须先升级开发环境:- 安装Visual Studio 2019及以上版本,加装官方SSIS项目扩展
- 打开原有SSIS解决方案,在项目属性页将
TargetServerVersion设置为SQL Server 2019 - 逐个打开包内所有脚本任务、脚本组件,点击「编辑脚本」按钮等待VSTA编辑器完全加载,不修改任何代码直接保存,关闭VSTA编辑窗口
注意:仅修改项目目标版本不逐个打开脚本触发重编译的话,脚本二进制块仍保留旧格式,部署后依然会报错
- 重新生成整个项目,使用新输出的ispac部署包到SQL Server 2019服务器验证
- 方案2:修复服务器端VSTA运行时缺失/损坏问题
如果重编译后的包部署仍报错,大概率是SQL Server 2019升级过程中VSTA组件安装异常:- 打开SQL Server安装中心,进入「维护」板块选择「修复」,勾选Integration Services、共享功能组件执行修复,流程会自动重新安装匹配版本的VSTA 15.0运行时
- 修复完成后重启服务器,删除SSISDB目录下原有错误部署的包,重新上传新编译的部署包运行
原地升级SQL Server的场景下,旧版本VSTA组件残留、新VSTA未完整安装是高频诱因
- 方案3:重建包规避损坏的旧格式元数据
如果前两个方案都无效,说明旧包在多次版本迁移过程中脚本元数据已经损坏:- 新建空白SSIS项目,项目目标版本直接设置为SQL Server 2019
- 将旧包内除脚本任务、脚本组件外的所有控制流、数据流任务复制到新包
- 逐个新建脚本任务/组件,将旧脚本的代码、引用配置、变量映射迁移到新脚本中
- 编译新包部署即可,该方案可以彻底清除旧包残留的不兼容元数据
常见避坑点
- 不要直接将目标版本为SQL Server 2012/2017的包直接部署到2019环境依赖运行时自动迁移脚本,尤其脚本中存在第三方托管DLL引用时,自动迁移成功率极低
- 不要在安装了多版本SQL Server、多版本Visual Studio SSDT的环境下编译生产部署包,多版本VSTA共存极易导致编译出的脚本格式不符合目标环境要求
内容的提问来源于stack exchange,提问作者Andrew Yi
相关产品推荐
相关产品推荐

