我有一个项目将数据从 MySQL 数据库移动到 SQL2012 中的数据库。现在没有什么花哨的,只是直接推送数据。我通过 ODBC 访问 MySQL 实例,而 SQL DB 是一个 OLE 连接。生成包时,ODBC 源和 OLE 目标之间存在元数据不匹配。(到目前为止,这就是数据流的全部内容)消息指出“列”无法在 unicode 和非 unicode 字符串类型之间转换。”
在源和目标之间的路径编辑器中检查元数据表明,问题源列被读取为长度为 255 且代码页为 1252 的 DT_STR。然而,在 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 中编译)
任何想法都会受到欢迎,我对这个的想象几乎已经走到了尽头。
谢谢!