我开发了一个非常简单的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)Standard Edition(64位)的生产服务器时,任务将失败。
原来的错误信息是:
以用户身份执行:xxxxx。 对于64位代码,Microsoft(R)SQL Server执行包实用程序版本9.00.5000.00:0x00000009源:PackageName说明:由于未预编译脚本,因此任务无法在64位环境中执行。 请打开选项以在任务编辑器中预编译脚本。 结束错误…错误DTExec:程序包执行返回DTSER_FAILURE(1)。
广泛的研究后,互联网build议我尝试:
所以经过更多的研究,我发现我需要打开“请打开选项,在任务编辑器中预编译脚本”。 SOURCE:ssis-dtsx DOT blogspot DOT com / 2010/03 / can-execute-in-64-bit-environment.html其中包含:
但是,当我执行包,我马上得到错误:
以用户身份执行:xxxx。 …对于64位代码为0.5000.00代码:0x00000008源:PackageName说明:任务configuration为预编译脚本,但未find二进制代码。 请通过单击“devise脚本”button访问“脚本任务编辑器”中的IDE,以生成二进制代码。 结束错误代码:0x00000008来源:GET PO信息和电子邮件说明:脚本无法重新编译或运行:检索具有CLSID的组件的COM类工厂…
所以我最后一步是在SSIS pkg中将DelayValidation属性从False变为True,进入devise脚本使其重新生成,然后重新部署,然后重新运行,仍然得到相同的错误。
在search错误,我指向微软HOT FIX这build议我下载另一个修补程序。
我还没有下载修补程序,并且不希望如果我可以避免它(我们的OP团队不喜欢在生产服务器中间运行修补程序)。
转到包,打开脚本组件,然后在Visual Studio中(同时查看代码)单击BUILD。 这将编译该软件包,如果没有问题阻止它编译。 然后保存,返回并确保你点击“OKAY”而不是“取消”,如果你点击取消,那么整个事情就会恢复。