繁体   English   中英

SSIS包失败,因为“脚本任务由于未预编译而失败”

[英]SSIS Package failing because “script task is failing because the script is not precompiled”

我开发了一个非常简单的SSIS包(在VS2005中,带有.Net Framework V 2.0.50727 SP2),该包获取要发送电子邮件的用户列表,启动for-each循环容器,然后执行脚本任务以检索用户特定的数据并通过电子邮件将其发送给用户。 当我在开发箱上运行该程序时,一切正常,并可以正常运行。 但是,当我将程序包部署到运行的生产服务器(Windows NT 5.2(内部版本3790:Service Pack 2)上的Microsoft SQL Server 2005-9.00.5000.00(X64)标准版(64位))时,任务失败。

原始错误消息是:

以用户身份执行:xxxxx。 Microsoft(R)SQL Server执行软件包实用程序版本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 = True
  • 单击设计脚本以打开代码编辑器(Visual Studio for Applications),然后使用“文件”>“关闭并返回”选择它(VSA将重新编译二进制代码并将其存储在程序包中)。
  • 建立专案并复制到目标位置

但是,当我执行包时,我立即收到错误消息:

以用户身份执行:xxxx。 ... 0.5000.00(用于64位代码:0x00000008源:PackageName)说明:该任务配置为预编译脚本,但找不到二进制代码。 请通过单击“设计脚本”按钮访问Script Task Editor中的IDE,以生成二进制代码。 结束错误代码:0x00000008源:GET PO infor和电子邮件说明:脚本无法重新编译或运行:检索具有CLSID的组件的COM类工厂...

因此,我的最后一步是将SSIS pkg中的DelayValidation属性从False更改为True,进入设计脚本以对其进行重建,然后重新部署,然后重新运行,我仍然遇到相同的错误。

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

我尚未下载此修补程序,并且如果可以避免的话,则不愿这样做(我们的操作团队不喜欢在生产服务器中午运行修补程序)。

转到程序包,打开脚本组件,然后在Visual Studio中(同时查看代码)单击BUILD。 如果没有问题阻止编译,将编译该软件包。 然后保存,返回并确保您单击“确定”而不是“取消”,如果单击“取消”,则整个操作将恢复原状。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM