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