SSIS:无法创建OLE DB访问器。验证列元数据是否有效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSIS:无法创建OLE DB访问器。验证列元数据是否有效相关的知识,希望对你有一定的参考价值。
我有一个SSIS包,在他的OLEDB目的地有一个NVARCHAR(MAX)字段。该字段甚至没有被数据流填充。数据流任务失败,并显示错误“无法创建OLE DB访问者。验证列元数据是否有效”。
我看到了类似的问题:How do I fix the multiple-step OLE DB operation errors in SSIS?,并根据它的建议检查了我的元数据。我发现SSIS将违规列映射为NTEXT而不是DT_WSTR。我尝试将其类型更改为长度为8000的DT_WSTR,但仍然会出现相同的错误。还尝试用NULL填充字段,同样的错误。将“验证外部元数据”设置为false并没有任何区别。有关如何解决它的任何建议?
谢谢。
我找到了另一种(可能更快)的方法来解决这个问题,但它有点尴尬。需要注意的是,您的数据可能会被截断。使用它是否是个好主意取决于数据的用途。
假设违规列输出已设置为Unicode text stream [DT_NTEXT]
。在第一个之后添加第二个数据转换步骤,将第一个转换的输出放入第二个,您可以从Unicode text stream [DT_NTEXT]
映射到Unicode string [DT_WSTR]
(长度= 4000)。它会警告您截断的可能性,但现在您可以使用第二次转换的输出数据。
仅仅为了记录,我结束了使用.Net目的地,这个错误不会发生。
我有一个类似的问题。我有一个从NVARCHAR(MAX)更改为NVARCHAR(4000)的SQL字段,但是给出了我描述的相同错误。令人难以置信的令人沮丧。我能够通过取消映射OLE DB目标中的列错误地将字段列为NTEXT来修复它。然后,遍历OLE DB目标之前的每个SSIS操作,并选择“显示高级编辑器...”,然后单击“刷新”。在为每个先前步骤执行此操作后,我重新映射了列,SSIS最终选择了该列现在是DT_WSTR。
我在ACCESS数据库中遇到了同样的问题,因此我使用了Derived Column,并创建了所有必需的字段(DT_STR,<>,<>)(长度为表列的大小,代码页为1252)。这不仅在ACCESS中起作用,而且也在EXCEL源中起作用。
希望这可以帮助。
我最终使用.NET目标,但真正的问题是目标表列已过时。
尝试通过将目标更改为另一个表然后更改为上一个表或直接删除该操作然后再使用正确的映射将其重新添加来刷新它们。
以上是关于SSIS:无法创建OLE DB访问器。验证列元数据是否有效的主要内容,如果未能解决你的问题,请参考以下文章
SSIS OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80004005,无法确定元数据
在 SSIS 2012 的 OLE DB 源中使用动态 SQL
关于无法创建链接服务器 "(null)" 的 OLE DB 访问接口