SSIS脚本任务版本兼容问题求助:跨服务器部署后执行报错
嘿,这个问题我碰到过好几次了,核心原因其实是:你用VS2015开发时,默认的SQL Server Data Tools (SSDT)版本是15.x,编译出来的脚本任务/组件会标记为15.0版本,而SSIS 2016 SP1本身只支持最高14.x版本的脚本运行时。Server A能正常执行,大概率是因为它额外安装了高版本SSDT的兼容组件,而Server B没装这玩意儿。
给你几个能快速解决的步骤:
先把项目的编译环境切回SSIS 2016兼容模式
打开你的SSIS项目,右键项目名称→属性→配置属性→常规,确认TargetServerVersion已经设为SQL Server 2016。然后逐个处理脚本任务/组件:右键脚本任务→编辑脚本,在弹出的脚本编辑器里,点击脚本项目的属性→生成,把目标框架改成.NET Framework 4.6.1(这是SSIS 2016对应的官方框架版本),平台目标选Any CPU就行。重新编译所有脚本,再重新部署到Server A
别光改属性就完事了,每个脚本任务/组件都要打开编辑器点一下“确定”,让VS重新编译脚本——有时候属性改了脚本不会自动更新。编译完后,把整个项目重新部署到Server A的SSIS_DB里。检查Server B的SSIS补丁和组件
登录Server B,确认已经安装了SSIS 2016 SP1的最新累积更新(CU),缺失补丁经常会导致这类版本兼容问题。另外,看看Server B有没有装更高版本SQL Server(比如2019)的SSIS组件,不同版本的组件混装很容易冲突。直接从VS部署到Server B,别从Server A迁
最稳妥的方式是绕开Server A的SSIS_DB,直接从你的VS2015开发环境把项目部署到Server B。这样能确保脚本是用兼容版本编译后直接发布的,不会带过去Server A上的兼容组件依赖信息。
额外提个醒:
如果你之前是用导出/导入SSIS_DB的方式迁移包,很容易把Server A上的脚本版本标记带过去,而Server B没有对应的运行时,自然就报错了。直接从开发环境部署才是最靠谱的。
内容的提问来源于stack exchange,提问作者Nathan TSQL_Jr

