BIML 创建错误的元数据
Posted
技术标签:
【中文标题】BIML 创建错误的元数据【英文标题】:BIML creating bad metadata 【发布时间】:2017-07-28 03:11:57 【问题描述】:我有一个项目将数据从 mysql 数据库移动到 SQL2012 中的数据库。现在没有什么花哨的,只是直接推送数据。我通过 ODBC 访问 MySQL 实例,而 SQL DB 是一个 OLE 连接。生成包时,ODBC 源和 OLE 目标之间存在元数据不匹配。 (到目前为止,这就是数据流的全部内容)消息指出“列”无法在 unicode 和非 unicode 字符串类型之间转换。”
在源和目标之间的路径编辑器中检查元数据表明,问题源列被读取为 DT_STR,长度为 255,代码页为 1252。然而,在 MySQL 中,它们被整理为 utf8_general_ci,即 unicode。
目标 SQL 数据库表中对应的列是长度相同的 varchar。
如果我打开 OLE 目标并单击“确定”,元数据会刷新,并且在保存包后可以正常工作。这违背了使用 BIML 创建包的全部目的,并且需要永远打开 50 多个包来刷新元数据并保存。
我已经尝试了几件事,但行为没有改变:
在 unicode 和 ansi MySQL odbc 驱动程序之间进行更改。 尝试将目标列设为 nvarchar。但我必须进行数据转换才能完成这项工作。 在 OLEDBDestination 的 ExternalTableOutput 元素中的 [] 中包含架构/表名称。 更改了 SQL Native Client 版本。 在从 MySQL 提取的源查询末尾添加一个“COLLATE latin1_bin”语句。 最初是在带有 BimlExpress 的 VS2015 中,并在带有 BimlExpress 的 SSDT 2012 中进行了尝试。 (顺便说一句...由于缺少 Microsoft.DataWarehouse.Interfaces dll,必须在 2014 年安装 SSDT 才能让 BIML 在 SSDT2012 中编译)任何想法都会受到欢迎,我对这个想法的想象几乎已经结束了。
谢谢!
【问题讨论】:
您是否尝试过使用不同的连接类型,例如ADO
?
【参考方案1】:
我也遇到过类似的问题。最后我不得不在记事本中打开生成的打包文件,并通过文本文件将单词 bytes 替换为 wstr。我保存并重新打开,一切正常。
【讨论】:
@lmiguelvargasf 这实际上也试图提供答案。以上是关于BIML 创建错误的元数据的主要内容,如果未能解决你的问题,请参考以下文章
部署 SSIS 包时 Visual Studio 2012 崩溃
MVC-5 对存储过程使用复杂类型的函数;创建视图给出错误:'无法检索 MyProject.Models.Movies_Result 的元数据