我有一个简单的DataFlow,其中有两个对象,一个是mdb文件,另一个是MSSQL数据库。
我们的想法是将数据从一个迁移到另一个。
问题是数据是从Access查询中提取的,一列有〜1000个字符,而在高级属性的SSIS中,外部列的长度默认为255,因此当我执行任务时,它会尝试截断它。禁用truncate上的throw错误不是一个选项,并且无法修改外部列的长度,它会抛出有关元数据的错误。
首先,任何人都可以解释为什么?
其次,我需要一个解决方案,我需要它快速,因为它有点让我发疯。
答案 0 :(得分:0)
这种问题出现了,因为ssis任务通过检查前100行(afaik)来“猜测”列的长度。因此,如果从1到100的所有行的长度都为10而行101的长度为11,则任务将失败,因为长度“猜到”为10。
修改会引发错误,因为您将validateExternalMetadata
设置为true
。要解决此问题,请转到导入任务的advanced options
(访问权限),并将值设置为false
。
这意味着,任务将接受您输入的修改后的值而不进行检查。
答案 1 :(得分:0)
您是否尝试 SSIS导入和导出向导从BI开发环境中导入数据?这是MsAccess最简单的方法,因为这不仅可以导入数据,还可以保存包。如果您在导入过程中遇到错误(使用向导),请发布它,因为这有助于进一步调查。另外,正如@stb建议的那样,尝试使用超过1000个字符的第一个记录。
答案 2 :(得分:0)
Access支持与MSSQL中的视图等效的查询。 列大小的定义不是通过查看一些结果,而是通过列数据类型的默认列长度来定义。
我创建了另一个具有所需数据类型的表,并且在数据流之前我已经将2个sql脚本放入包中:一个用于删除表中的所有数据,另一个用于对表执行查询,以便处理它作为临时表。
然后针对此伪临时表执行实际数据流。
这解决了我的问题。