【发布时间】:2015-09-09 12:23:13
【问题描述】:
我开发了一个非常简单的 SSIS 包(在带有 .Net Framework V 2.0.50727 SP2 的 VS2005 中),它获取要发送电子邮件的用户列表,启动一个 for-each 循环容器,然后执行一个脚本任务来检索用户特定数据并将其通过电子邮件发送给用户。当我在我的开发盒上运行它时,一切都很好并且运行正常。但是,当我将包部署到我们运行的生产服务器(Microsoft SQL Server 2005 - 9.00.5000.00 (X64) Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) )时,任务失败。
原来的错误信息是:
作为用户执行:xxxxx。 Microsoft (R) SQL Server Execute Package Utility Version 9.00.5000.00 for 64-bit 代码:0x00000009 来源:PackageName 描述:该任务无法在 64 位环境中执行,因为该脚本未预编译。请在任务编辑器中打开预编译脚本的选项。结束错误...错误 DTExec:包执行返回 DTSER_FAILURE (1)。
在广泛研究后,互联网建议我尝试:
- 通过更改 SQL 作业中的执行属性并将我的 RunIn64BitMode 属性从 true 更改为 false,以 32 位运行包
- 失败,因为“选项”/X86“无效。”
- 安装Microsoft Hotfix
- 这不适用,因为我已经在 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 for 64-bit 代码:0x00000008 来源:PackageName 描述:任务配置为预编译脚本,但未找到二进制代码。请通过单击“设计脚本”按钮访问脚本任务编辑器中的 IDE,以生成二进制代码。结束错误代码:0x00000008 来源:GET PO infor 和电子邮件说明:无法重新编译或运行脚本:正在检索具有 CLSID 的组件的 COM 类工厂...
所以我的最后一步是在 SSIS pkg 中将 DelayValidation 属性从 False 变为 True,进入设计脚本以使其重新构建,然后重新部署并重新运行,但我仍然遇到相同的错误。
在搜索错误时,我被定向到Microsoft HOT FIX,它建议我下载另一个修补程序。
我还没有下载修补程序,如果可以避免的话,我宁愿不下载(我们的 OPs 团队不喜欢在生产服务器上运行修补程序的中午)。
【问题讨论】:
标签: c# sql-server windows ssis visual-studio-2005