将SSIS包从SQL Server 2012升级至SQL 2019出现脚本报错如何解决
SSIS从SQL Server 2012升级至2019脚本报错修复方案
两类报错的根因分别为脚本组件预编译逻辑异常、SSIS程序集引用版本与目标环境不匹配,可按以下步骤逐一排查修复:
1. 统一开发与运行环境基础组件版本
- 开发机安装匹配Visual Studio版本的SQL Server Integration Services扩展,确保扩展最高支持SQL Server 2019,避免内置程序集版本缺失
- 目标SQL Server 2019服务器至少升级到CU12以上版本,SQL Server 2017、2019早期CU存在SSIS脚本组件程序集注册异常的已知问题,会直接触发属性未定义报错
2. 修复The binary code for the script is not found.报错
- 打开所有包含脚本任务、脚本组件的SSIS包,逐个进入VSTA脚本编辑器,手动点击「生成」-「生成解决方案」,确认无编译错误后保存退出,不要直接关闭编辑器
- 检查每个脚本组件的属性,确认
PrecompileScriptIntoBinaryCode属性设置为True,避免部署到服务器后无法实时编译生成二进制代码 - 直接将SSIS项目的目标服务器版本设置为
SQL Server 2019,不要降级到2014/2016/2017,跨版本降级会导致编译生成的二进制代码与目标环境不兼容
3. 修复Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute is not defined.报错
- 右键SSIS项目进入属性页,打开「引用」列表,确认
Microsoft.SqlServer.DTSPipelineWrap、Microsoft.SqlServer.ManagedDTS、Microsoft.SqlServer.ScriptTask等核心DTS程序集的版本与目标SQL Server版本匹配:- SQL Server 2017对应程序集版本为14.x
- SQL Server 2019对应程序集版本为15.x
- 若存在引用版本不匹配,删除旧引用,从对应版本的SSIS安装目录下重新添加正确版本的程序集,之后重新生成整个解决方案
4. 部署前后校验配置
- 生成解决方案前先执行「清理解决方案」操作,删除所有旧编译缓存文件,避免旧版本二进制代码残留
- 部署到SSISDB后,右键对应包打开「配置」页,确认运行时.NET框架版本设置为4.7.2以上,与开发环境编译脚本用的.NET版本一致
- 若仍有报错,可尝试开启SSIS包运行的「32位运行时」选项,部分2012版本的旧脚本组件依赖32位程序集运行
内容的提问来源于stack exchange,提问作者Reddington
相关产品推荐
相关产品推荐

