2

我们在开发虚拟机上开发了一个 2012 SSIS 包,该虚拟机在 VS 2010 和通过 2012 服务器上的集成服务目录成功端到端运行。当我们在与我们的开发虚拟机具有相同映像的暂存虚拟机上运行完全相同的 SSIS 包时,它在各种任务上都会失败。两个 VM 之间的唯一区别是我们在连接管理器中指向的服务器。但是,该问题与端点或数据无关,而与 SSIS 实际运行任务的方式有关。在我们的几个数据流任务中,我们使用 OLE DB 源组件并使用需要参数的 Sql 命令。在我们所有的查询中,我们都放置了注释标题。在我们的开发虚拟机上,这工作正常......没有问题。从登台 VM 运行时,它无法解析查询以确定参数。另一个示例来自我们正在提取的执行 SQL 组件@@DBTS并将其转换为 bigint (即SELECT CAST(@@DBTS AS bigint))。这被放入字符串类型的 SSIS 变量 (CurrentTimeStamp) 中。然后我们将它传递给另一个执行 SQL 组件,该组件调用一个存储过程,该过程采用变量 (CurrentTimeStamp),但在参数映射中,我们将输入作为 LONG 数据类型传递。同样,这在我们的开发虚拟机中运行良好,但在暂存虚拟机中却不行。我们收到以下错误:“将结果提取到类型为 (DBTYPE_I4) 的变量时发生错误”。可能的失败原因: 查询问题。“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。

我比较了操作系统版本、补丁和安装的软件。与下面列出的唯一区别:

  • 开发虚拟机暂存虚拟机
  • 缺少 Microsoft Team Foundation Server 2010 - ENU v10.0.40219
  • Microsoft Visual C++ 2008 Redistributable - x64 9.0.3.0729.4148 缺失
  • Microsoft Visual C++ 2008 Redistributable - x86 9.0.3.0729.4148 缺失
  • 缺少 Microsoft Visual C++ 2008 Redistributable - x64 9.0.3.0729.4974

如果其他人经历过类似的事情,您可能提供的任何指导将不胜感激。我们的下一步是向 MS 开一张支持票,因为这只是一个令人头疼的问题。

在此先感谢,安东尼

编辑...这个问题已经解决。请参阅下面的摘要。

问题一:

++我们有一个执行 Sql 任务,它返回一个数据库时间戳值,该值存储在一个 LONG 类型的变量中。该任务在 DEV 服务器上有效,但在 PROD 服务器上失败。在 PROD Server 中,如果我们将 SSIS 变量类型更改为 ULONG,则任务成功。

我们发现在 PROD 中,返回值是一个很大的数字,导致 LONG 数据类型溢出。在 DEV 中,我们的值较小,问题没有发生。我研究并检查了 ULONG 最大值归结为 UInt64.MaxValue ,它非常大,应该足以满足您的要求。(最大值为:18,446,744,073,709,551,615)

http://msdn.microsoft.com/en-us/library/system.uint64.maxvalue.aspx

问题 2:

++我们有一个触发 Sql 命令的 OLE DB 源。如果我们在查询顶部添加注释,它可以在 DEV 服务器上运行,但在 PROD 服务器上解析时验证失败,并出现错误:无法从 SQL 命令中提取参数。提供程序可能无法帮助解析命令中的参数信息。在这种情况下,请使用“来自变量的 SQL 命令”访问模式,其中整个 SQL 命令都存储在一个变量中。


附加信息:

语法错误、权限冲突或其他非特定错误 (Microsoft SQL Server Native Client 11.0)

我们发现评论解析能力实际上是在执行查询的后端查询引擎上,而不是特定于 SSIS。在我们的 DEV 中,我们针对解析良好的 Sql 2012 实例触发查询(带有注释)。在失败的 PROD 服务器中,查询是针对无法解析注释的 Sql 2008 R2 实例执行的。如果我们将 PROD 中的连接管理器更改为指向 Sql 2012 实例并使用注释触发相同的查询,则它解析得很好。

4

0 回答 0