我最近构建了一个SSIS包(2008年),它使用Excel2007电子表格(.xlsx扩展)。将电子表格的内容转储到记录集对象中,然后将其传递给脚本任务编辑器,后者遍历每一行,以适当的方式格式化数据,然后将其写入csv文件。
CSV输出与Excel文件所在的网络位置相同。在我的本地开发环境中,一切都按其应有的方式工作,但是当包被部署到活动的SQL服务器并从那里执行时,我们会得到以下错误:
错误: 2018-02-16 12:42:41.60代码: 0x00000001来源:导出记录集到CSV描述: System.Reflection.TargetInvocationException:异常已被调用的目标抛出。 -> Microsoft.SqlServer.Dts.Runtime.DtsRuntimeException:“组件”"Recordset目的地“(338)”编写了564行。-> System.Runtime.InteropServices.COMException (0xC0010014):“组件”“记录目标”(338)“写入564行”。 在Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSVariable100.get_Value() 在Microsoft.SqlServer.Dts.Runtime.Variable.get_Value() --内部异常堆栈跟踪的末尾-- 在Microsoft.SqlServer.Dts.Runtime.Variable.get_Value() 在ST_5a1e9be825584201adc4e2b6248e429e.vbproj.ScriptMain.Main() --内部异常堆栈跟踪的末尾-- 在System.RuntimeMethodHandle._InvokeMethodFast(Object target,Object[]参数,SignatureStruct& sig,MethodAttributes methodAttributes,RuntimeTypeHandle typeOwner) 在System.RuntimeMethodHandle.InvokeMethodFast(Object目标,Object[]参数,签名sig,MethodAttributes methodAttributes,RuntimeTypeHandle typeOwner) 在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,binder粘合剂,Object[]参数,CultureInfo文化,布尔skipVisibilityChecks) 在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,binder粘合剂,Object[]参数,CultureInfo培养) at System.RuntimeType.InvokeMember(字符串名称、bindingFlags BindingFlags、绑定器、对象目标、Object[] providedArgs、ParameterModifier[]修饰符、CultureInfo文化、String[] namedParams) 在System.Type.InvokeMember(字符串名称、BindingFlags invokeAttr、绑定器、对象目标、Object[] args、CultureInfo区域性) 在Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript() End Error DTExec:包执行返回DTSER_FAILURE (1)。 开始: 12:42:39完成: 12:42:41经过: 1.64秒。包执行失败。这个步骤失败了。
最初我们认为问题是因为包试图运行64位版本的Excel,但我们排除了这一原因。
我完全不明白为什么包在我的本地机器上运行时没有问题,但在远程服务器上却失败了,特别是因为我为此使用的代码几乎与独立包中的代码完全相同,该包可以正常工作。
发布于 2018-02-16 15:50:56
我将确保您要转储到的CSV具有要写入的包的正确权限。此外,您的环境是最新的修补。
我确实找到了一个帖子这里,其中有人提到有一个类似的问题,你的。他说,他通过移除和重建记录集对象来绕过它--如果上面的内容不起作用,我会再试一试。
https://stackoverflow.com/questions/48827840
复制相似问题