SSIS C# 脚本不兼容

SSIS C# script is not compatible

我最近接管了一个基于 SSIS ETL 的流程,由于一些许可问题,我不得不从 Data Tools 2013 升级到 2015。 大多数项目在升级后幸存下来并且 运行 很好。 但是,在两个包中,我有一个非常简单的 C# 方法(脚本转换)来解析一些导致某些问题的数据。

目前部署是使用"build"完成的(不是通过SSIS目录的较新开发方法),SQL SERVER Job的步骤直接指向dtsx文件。

该作业是在 SQL SERVER 2014 中创建的,它分步安排 ETL。服务器具有 64 位配置。

我已尝试将 SSIS 项目 属性 "Run64BitRuntime" 更改为 False 并强制失败的步骤使用 32 位 运行 时间。 另外,我也试过用相同的配置重新创建组件,但都没有用。

奇怪的是,当我 运行 来自 SSIS 的包时,它成功完成,但作业崩溃并抛出以下错误消息:

*"decode"为转换脚本组件名称

留言 ... 开始:11:32:30 PM 错误:2015-12-12 23:32:31.26 代码:0xC0047062 来源:stg stg (decode [2]) 描述:Microsoft.SqlServer.Dts.Pipeline.ComponentVersionMismatchException: decode 的版本与此版本的 DataFlow 不兼容。 [[指定组件的版本或管道版本或两者都高于当前版本。此程序包可能是在新版本的 DTS 或组件上创建的,而不是当前 PC 上安装的组件。]] at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostCheckAndPerformUpgrade(IDTSManagedComponentWrapper100 wrapper, Int32 lPipelineVersion) End Error Error: 2015-12-12 23:32:31.26 代码:0xC004801F 来源:stg stg (SSIS.Pipeline) 描述:"decode" 的组件元数据无法升级到组件的较新版本。 PerformUpgrade 方法失败。结束错误错误:2015-12-12 23:32:31.28 代码:0xC004801F 来源:stg SSIS.Pipeline 描述:"decode, clsid {33D831DE-5DCF-48F0-B431-4D327B9E785D}" 的组件元数据无法升级到组件的较新版本。 PerformUpgrade 方法失败。 End Error 错误:2015-12-12 23:32:31.28 代码:0xC0048021 来源:stg decode [2] 描述:组件丢失、未注册、不可升级或缺少所需接口。此组件的联系信息是 "Includes and runs custom script code. For example, apply a business rule that limits the range of valid values in an "income" 列或将两列中的值相加并计算总和的平均值。;Microsoft Corporation; Microsoft SQL Server; Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;9”。结束错误 Error: 2015-12-12 23:32:31.28 Code: 0xC0047017 Source: stg SSIS.Pipeline Description: decode failed validation and returned error code 0xC0048021.结束错误错误:2015-12-12 23:32:31.28 代码:0xC004700C 来源:stg SSIS.Pipeline 描述:一个或多个组件验证失败。结束错误错误:2015-12-12 23:32:31.28 代码:0xC0024107 来源:stg 描述:任务验证期间出现错误....

我试图更新我唯一没有接触过的元素 - SQL Server 2014,但没有任何影响。最终我决定完全掌控流程并通过将逻辑下推到数据库来解决它。

我遇到了同样的问题“错误代码:0xC0048021”并解决了它。

我从这里安装了这个版本的 SSDT https://msdn.microsoft.com/en-us/mt429383

然后,在 SSDT 解决方案资源管理器中右键单击项目,转到属性 --> 配置属性 --> TargetServerVersion = SQL SERVER 2014

然后,在 SSDT 解决方案资源管理器中右键单击项目,转到属性 --> 配置属性 --> 调试 --> Run64BitRuntime = False

参考What's New for SSIS 2016 RC0?

在我的例子中,将 SSIS 包更改为 32/64 位,并设置目标 SQL 版本没有奏效。

如果即使将 SQL 目标版本设置为 2016 也出现此问题,请确保您使用的是正确版本的 SQL 服务器部署向导。 如果您尝试在 SQL2016 上部署包,请确保您有 ISDeploymentWizard:

C:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn Server0\DTS\Binn\ISDeploymentWizard.exe

如果没有,您必须安装专用于 SQL Server 2016 (download link) 的 SSMS,这将安装 ISDeploymentWizard。向后兼容更高版本的 SSMS 将不会安装 ISDeploymentWizard。

可能是更高版本的 ISDeploymentWizard 将 SSIS 包升级到更高版本,SQL服务器无法降级。

如果您更改了项目的目标服务器版本,如其他答案中所述,请确保检查您是否已针对适用的配置进行了更改您正在部署(开发、测试、生产)。