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

时间:2015-06-23 15:36:36

标签: c# sql-server windows ssis visual-studio-2005

我开发了一个非常直接的SSIS包(在VS2005 w / .Net Framework V 2.0.50727 SP2中),它获取用户电子邮件列表,启动for-each循环容器,然后执行脚本任务以检索用户特定数据并通过电子邮件发送给用户。当我在我的开发盒上运行它时,一切都运行良好,并按预期运行。但是,当我将程序包部署到运行的生产服务器(Windows NT 5.2(Build 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 Hotfix
    • 由于我已在SP2上运行而无法应用
  3. 经过更多的研究后,我发现我需要打开"请打开选项,在任务编辑器中预编译脚本。"消息来源:ssis-dtsx DOT blogspot DOT com / 2010/03 /无法执行64位环境 这需要:

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

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

      

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

    所以我的最后一步是在SSIS pkg中将DelayValidation属性从False变为True,进入设计脚本以使其重建,然后重新部署,然后重新运行,我仍然会收到相同的错误。

    在搜索错误时,我被定向到Microsoft HOT FIX,这表示我下载了另一个修补程序。

    我还没有下载此修补程序,如果我可以避免它,我不愿意(我们的OP团队不喜欢在生产服务器上运行修补程序)。

1 个答案:

答案 0 :(得分:1)

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