2

我有一个项目将数据从 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 中编译)

任何想法都会受到欢迎,我对这个的想象几乎已经走到了尽头。

谢谢!

4

1 回答 1

0

我在类似的问题上苦苦挣扎。最后我不得不在记事本中打开生成的打包文件,并通过文本文件将单词 bytes 替换为 wstr。我保存并重新打开,一切正常。

于 2017-05-19T22:23:02.337 回答