SSIS包失败,因为“;脚本任务失败,因为脚本未预编译“;

本文关键字:脚本 因为 失败 编译 任务 SSIS 包失败 | 更新日期: 2023-09-27 17:59:17

我开发了一个非常直接的SSIS包(在VS2005 w/.Net Framework V 2.0.50727 SP2中),它可以获取要通过电子邮件发送的用户列表,为每个循环容器启动一个,然后执行一个脚本任务来检索用户特定的数据并通过电子邮件发送给用户。当我在我的开发盒上运行它时,一切都很好,并且运行正常。但是,当我将程序包部署到运行Windows NT 5.2(内部版本3790:Service Pack 2)的生产服务器(Microsoft SQL server 2005-9.00.5000.00(X64)Standard Edition(64位))时,任务失败。

原始错误消息为:

以用户身份执行:xxxxx。Microsoft(R)SQL Server Execute Package Utility版本9.00.5000.00(适用于64位)代码:0x00000009来源:PackageName描述:由于未预编译脚本,因此无法在64位环境中执行任务。请在任务编辑器中启用预编译脚本的选项。结束错误。。。错误DTExec:包执行返回DTSER_FAILURE(1)。

在广泛研究后,互联网建议我尝试:

  1. 通过更改SQL作业中的执行属性并将我的RunIn64BitMode属性从true更改为false,以32位运行包
    • 由于"选项"/X86"无效,该操作失败。"
  2. 安装Microsoft修补程序
    • 这不适用,因为我已经在SP2上运行了

因此,经过更多的研究,我发现我需要打开"请在任务编辑器中打开预编译脚本的选项。"来源:ssis dtsx DOT blogspot DOT com/2010/03/cannot-execute-in-64-bit-environment.html其中包括:

  • 确保每个脚本任务都具有PreCompile=True
  • 打开"脚本任务编辑器",切换到"脚本"选项卡,并确保PrecompileScriptIntoBinaryCode=真
  • 单击"设计脚本"打开代码编辑器(Visual Studio for Applications),然后使用"文件">"关闭并返回"选择它(VSA将重新编译二进制代码并将其存储在包中)
  • 生成项目并复制到目标位置

然而,当我执行包时,我立即得到错误:

以用户身份执行:xxxx。。。0.5000.00表示64位代码:0x00000008来源:PackageName描述:任务被配置为预编译脚本,但找不到二进制代码。请单击"设计脚本"按钮访问脚本任务编辑器中的IDE,以生成二进制代码。结束错误代码:0x00000008来源:GET PO信息和电子邮件描述:脚本无法重新编译或运行:正在检索CLSID为的组件的COM类工厂。。。

因此,我的最后一步是在SSIS pkg中将DelayValidation属性从False改为True,进入设计脚本以重新构建它,然后重新部署并重新运行,但我仍然会收到同样的错误。

在搜索错误时,我被引导到Microsoft HOT FIX,它建议我下载另一个修补程序。

我还没有下载修补程序,如果我能避免的话,我宁愿不下载(我们的OP团队不喜欢在生产服务器上中午运行修补程序)。

SSIS包失败,因为“;脚本任务失败,因为脚本未预编译“;

转到包,打开脚本组件,然后在Visual Studio中(查看代码时)单击BUILD。如果没有问题阻止它编译,这将编译包。然后保存,返回并确保单击"确定"而不是"取消",如果单击"取消"则整个过程将恢复。