SQL 服务器 2012 CU7 导致 SSIS XML 任务 - XSLT 将输出转换为变量错误

SQL Server 2012 CU7 Causing SSIS XML Task - XSLT Transform Output to Variable Error

我目前有一个 SSIS 包,它执行网络服务调用,将 xml 返回给一个变量。 XML - 任务然后对 xml 执行 XSLT 转换并继续执行数据流任务。这在安装 SQL Server 2012 CU7 之前有效。现在,无论何时执行包,它都会在 XSLT 转换上出错,并在 sysssis 日志中显示此错误:

发生错误并显示以下错误消息:"Cannot access a closed Stream."。

如果 XML - 任务的输出更改为文件,则它会成功执行。

查看 CU7 中的更新,我发现 KB3063438。在我看来,他们似乎已经纠正了一个我没有遇到的问题,并导致了另一个问题。我还应该提到,该包在 SQL 服务器数据工具中在我的本地计算机上成功执行。为了测试我安装了 CU7,因为我是在 CU6 上,现在我在本地机器上也收到了同样的错误。

还有其他人遇到这个问题吗?或者除了将包更改为输出到文件之外,是否有人找到了解决方法或修补程序?我都没有成功,我不想先将数据输出到文件或回滚 CU7。

**更新。我在我的本地机器上回滚了 CU7,包再次成功执行。

我最终向 Microsoft 开了一张支持票。结果发现,在执行 XSLT 转换并将输出存储到变量时,SQL Server 2012 SP2 的 XML 任务在 CU7 中存在 Bug。在 patch/hotfix/CU8 之前,他们提出了两种解决方法。

  1. 更改 XML 任务的输出选项以转到文件连接而不是变量。
  2. 在将执行 SSIS 包的生产服务器上回滚 CU7。

一旦他们通过 patch/hotfix/CU8 联系我,我将更新或评论此答案。

更新:我与 MS 确认修复不在 CU8 中。一旦他们告诉我最终结果 hotfix/CU/SP,我会再次更新。

更新 2:当 SP3 发布时,我与 MS 确认修复不包括在内。到目前为止,唯一真正的反馈是他们确认这是一个错误,并且在他们的项目列表中。没有预计到达时间。我厌倦了等待修复,因为它阻碍了我们修补其中一台服务器的能力,并最终编写了一个 c# 脚本任务来执行 xml 转换。或者,您仍然可以使用 XML 任务并将输出设置为文件。那确实有效。只有当您将输出设置为变量时才会出错。

最终更新:我还没有亲自确认这一点,但看起来微软已经在下面修复了这个问题 SPs/CUs:

  • SQL 服务器 2012 SP3 CU5
  • SQL 服务器 2014 CU13
  • SQL 服务器 2014 SP1 CU9
  • SQL 服务器 2014 SP2 CU3
  • SQL 服务器 2014 SP3 CU5
  • SQL 服务器 2016 CU4
  • SQL 服务器 2016 SP1 CU2

https://support.microsoft.com/en-us/help/3115741

我也遇到过同样的问题。但是,在与 Microsoft 合作后,我们发现可以通过升级到 SQL Server 2012 SP3 with CU5 来解决此问题。

https://support.microsoft.com/en-us/kb/3180915