2014-01-14 31 views
6

我有一个SSIS包,在他的OLEDB目标有一个NVARCHAR(MAX)字段。该字段甚至没有被数据流填满。数据流任务失败,错误为“无法创建OLE DB访问器,请验证列元数据是否有效”。SSIS:无法创建OLE DB访问器。验证列元数据是有效的

我看到了类似的问题:How do I fix the multiple-step OLE DB operation errors in SSIS?,并检查了我的元数据缓慢它的建议。我发现SSIS将违规列映射为NTEXT而不是DT_WSTR。我试着将它的类型改为长度为8000的DT_WSTR,但仍然得到相同的错误。还尝试用NULL填充该字段,同样的错误。将“验证外部元数据”设置为false并没有什么区别。任何关于如何修复它的建议?

谢谢。

+0

您将哪个数据类型源传递到该目标列。 – Kishore

+3

非常令人反感的错误。如果我没有记错,我必须强制刷新每个源/转换的元数据才能使其正常工作。强制刷新源意味着:选择其他表,保存,再次选择旧表,保存。 – OzrenTkalcecKrznaric

+0

@Kishore没有资料来源,目标中的违规列没有资料来源:-( – Oscar

回答

1

只是为了记录,我结束了使用.Net目的地,这个错误没有发生。

4

我发现另一种(可能更快)的方式来解决这个问题,但它有点尴尬。警告说你的数据可能会被截断。使用它的好主意取决于数据的用途。

假设有问题的列输出设置为Unicode text stream [DT_NTEXT]。在第一个数据转换步骤之后添加第二个数据转换步骤,将第一个转换的输出放入第二个数据转换步骤,您可以将Unicode text stream [DT_NTEXT]映射到Unicode string [DT_WSTR](长度= 4000)。它会警告你截断的可能性,但现在你可以使用第二次转换的输出数据。

+0

谢谢,如果截断是一个选项,这不是一个坏主意,我只是回答了我自己的问题,只是忘记了我自己解决问题的时间,谢谢。 – Oscar

0

我在ACCESS数据库中有同样的问题,所以我使用了派生列,并且创建了所有必需的字段(DT_STR,<>,<>)(长度是表列的大小和代码页是1252)。这不仅在ACCESS中起作用,而且还为EXCEL源代码工作。

希望这会有所帮助。

0

我最终通过使用.NET目标,但真正的问题是,目标表列已过时

尝试刷新它们,方法是将目标更改为另一个表,然后更改为上一个,或直接删除该操作,然后再将其添加回正确的映射。

1

我有类似的问题。我有一个从NVARCHAR(MAX)更改为NVARCHAR(4000)的SQL字段,但给了我与您描述的相同的错误。难以置信的令人沮丧。我能够通过在OLE DB目标中取消映射错误地将该字段列为NTEXT的列来修复它。然后,通过OLE DB目标之前的每个SSIS操作并选择显示高级编辑器...然后单击刷新。在完成之前的每一步之后,我重新映射了列,SSIS终于找到了该列现在是DT_WSTR。