从Access到MSSQL的SSIS DataFlow

时间:2012-11-21 13:01:47

标签: ms-access ssis

我有一个简单的DataFlow,其中有两个对象,一个是mdb文件,另一个是MSSQL数据库。

我们的想法是将数据从一个迁移到另一个。

问题是数据是从Access查询中提取的,一列有〜1000个字符,而在高级属性的SSIS中,外部列的长度默认为255,因此当我执行任务时,它会尝试截断它。禁用truncate上的throw错误不是一个选项,并且无法修改外部列的长度,它会抛出有关元数据的错误。

首先,任何人都可以解释为什么?

其次,我需要一个解决方案,我需要它快速,因为它有点让我发疯。

3 个答案:

答案 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脚本放入包中:一个用于删除表中的所有数据,另一个用于对表执行查询,以便处理它作为临时表。

然后针对此伪临时表执行实际数据流。

这解决了我的问题。