这个问题的目的是记录我对在 2012 年之前使用脚本任务的一些旧版本的 SSIS 中创建的 SSIS 包的目标 SQL Server 版本时似乎是一个奇怪问题的回答。
多年来,通过各种版本的 BIDS/SSDT 升级时,最初在 BIDS 2005 或 2008 中创建的 SSIS 包没有任何问题。即使现在包升级到 SSDT 并以 SQL Server 2016 为目标,除了能够利用最新的 SSIS 功能(包部件、项目参数等)和通过 SSDT 部署包之外,一切仍然像往常一样工作/Visual Studio 到同一目标 SQL Server。安装了 SSIS 并升级到 2016 或 2017 的 SQL Server 似乎与 MSDB 或包存储中的包没有问题,因为升级后作业继续按预期运行。
因此,作为正常升级例程的一部分,决定打开一个 SSIS 包并像以前一样使用以前的 SSDT 更改对其进行升级。在以前的 SSDT 更改中,一个版本适用于特定版本的 SSIS。一旦他们引入了针对某些以前版本的 SSIS 的功能,该功能似乎可以按预期工作。我认为最新的 SSIS 和 SSDT 版本会是一样的。
但是,一旦在 SSDT 中将目标版本更改为 SQL Server 2017,就会出现一些 SSDT 未捕获/修复或由于某种原因无法处理的问题。我遇到的一些问题是:
- 无法更改目标 .Net Framework 版本,因为它始终恢复为脚本任务属性中的原始设置
- 会出现错误,例如“'Dts' 不是 'Microsoft.SQLServer' 的成员”、“未定义类型 'Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase'”、“无法迁移包含在包为 VSTA 14.0 格式。将脚本移动到新的脚本任务。”,并且“未定义类型'Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute'。”
- 构建脚本任务将失败,错误之一是“主要参考”Microsoft.SqlServer.ScriptTask,Version=14.0.0.0,Culture=Neutral,PublicKeyToken=89845dcd8080cc91“无法解决,因为它是针对”构建的。 NETFramework,Version=v4.5” 框架。这是比当前目标框架“.NETFramework,Version=v4.0”更高的版本,我会看到的另一个错误是“在 Imports 'Microsoft.SqlServer 中指定的命名空间或类型.Dts.Runtime' 不包含任何公共成员或找不到。确保命名空间或类型已定义并包含至少一个公共成员。确保导入的元素名称不使用任何别名。”
好消息是将目标更改回 SQL Server 2016 似乎可以正常工作,我可以像以前一样继续编辑包而不会出现错误,并且构建将按预期工作,但坏消息是将 2016 包部署到 2017 SSIS 服务器没有得到转换就像在 SQL Server 升级期间所做的那样。那么,我如何能够更新包以针对 SQL Server 2017 并且不存在阻止这种情况的这些问题呢?