现在是第三天...尝试在运行 MSSQL 2012 和 Visual Studio 2010 的 Windows Vista 机器(64 位)上同步数据视图。理智正在消失,对进步的渴望充满了我的注意力。
我费尽心机尝试让 MySQL ODBC 驱动程序完成这项工作,但无济于事……似乎每个人都不知所措,我能找到的所有线索都是对我不起作用的解决方案。问题:SSIS 看不到系统 DSN。
我决定试用 ADO.NET 连接器……令我惊讶的是,它实际上位于 SSIS 数据源的选择列表中。因此我开始创建数据流任务,创建 ADO.NET 源(本地 MSSQL DB)……一切正常。
然后我迅速创建一个 ADO.NET 目标,输入我的凭据...哇,我终于在我的 Linux 服务器上选择一个数据库了!很高兴我终于找到了完成这项工作的方法。
然后我转到映射...不,有些不对劲...我收到了一个令我眼睛难受的错误:
管道组件从方法调用返回了 HRESULT 错误代码 0xC0208457。数据流任务 [ADO NET 目标 [81]] 中的错误:无法获取外部列的属性。您输入的表名可能不存在,或者您对表对象没有 SELECT 权限,并且通过连接获取列属性的其他尝试失败。详细的错误消息是“您的 SQL 语法有错误,请查看与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行“database”.tablename 附近使用的正确语法。
路径 C:\Program Files (x86)\Microsoft SQL Server\110\DTS\ProviderDescriptors\ 上的描述符文件不包含 MySQL.Data.MySqlClient.MySqlConnection 类型的连接的架构信息。
因此看起来它无法提供信息,因此我无法正确映射表格。
对此的任何想法都将非常有帮助...提前感谢所有人!
答案1
好吧,我找到了问题所在……默认情况下,MS 将 MySQL 数据库和表名称放在引号中。我删除引号,终于可以将表映射在一起了。不过还有另一个问题……留到另一篇文章再说吧。
答案2
默认情况下,MSSQL 将列和表名放在引号中,对于 MySQL,我们需要将其添加ANSI_QUOTES
到sql-mode
。
它可以设置my.ini
或my.cnf
取决于您的操作系统。
例如,对于 Windows Server 2012 MySQL 5.6,您可以在中找到它 C:\ProgramData\MySQL\MySQL Server 5.6
。
在 中my.ini
,您需要找到#sql-mode
并更新它,将“ANSI_QUOTES”添加到末尾。例如:
sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES"
然后您需要重新启动 MySQL 服务,然后在 MSSQL 的 SSIS 面板中执行下一步。