我正在尝试使用SQL Server 2008 SSIS从Access数据库将行插入MySQL数据库。
TITLE: Microsoft SQL Server Management Studio
------------------------------
ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.0.51a-community-nt]You have
an error in your SQL syntax; check the manual that corresponds to your MySQL
server version for the right syntax to use near '"orders"' at line 1
问题在于分隔符。我正在使用5.1 ODBC驱动程序,我可以连接到MySql并从ADO.Net目标数据源中选择一个表。 MySql表都显示在SSIS包编辑器中用双引号分隔:
"shipto addresses"
如果表名中有空格,则从ADO.NET目标编辑器上的“使用表或视图”文本框中删除双引号或用其他内容替换它们不起作用。 当SSIS将Insert查询放在一起时,它会保留双引号并添加单引号。
当我在编辑器中单击“预览”时,会显示上面的错误,并且在运行包时会抛出类似的错误(尽管是从实际的插入语句开始)。
我似乎无法控制此行为。有什么建议?我可以手工编写SQL的其他包类型没有这个问题。
答案 0 :(得分:3)
对不起InnerJoin,我不得不接受你接受的答案。我找到了a workaround here:
解决方案是为所有任务重用连接,并在执行任何插入之前为连接打开ANSI引号,并执行以下运行的执行Sql任务:
set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION,ANSI_QUOTES'
答案 1 :(得分:0)
尝试在表名周围使用方括号。这可能有所帮助。
编辑:如果可以的话,我会根据Access表创建视图(没有空格),并使用它们进行导出。即使这意味着使用链接表构建另一个Access数据库,我认为这是您最好的选择。
答案 2 :(得分:0)
我一直在努力直接使用SSIS和MYSQL。即使在安装ODBC驱动程序之后,它们也无法在数据流中发挥出色。我总是最终在SQL Server和MYSQL之间创建链接的ODBC连接。然后,我依靠链接的服务器查询来引入数据。我使用执行SQL命令,而不是使用SSIS数据流任务,通常采用执行OPENQUERY的存储过程的形式。
您可以做的一个解决方案是将数据加载到SQL Server数据库中,并在将其加载到MYSQL数据库之前将其用作临时环境。我经常在SQL Server 2008和MYSQL之间移动数据,过去我用它来定期在Access和SQL Server之间移动数据。
另一种可能的解决方案是在传入的Access数据加载到MYSQL数据库之前对其进行转换。这可能会让您有机会清理列名和正在进行MYSQL的实际数据。
如果其中任何一项适合您,请告诉我。
答案 3 :(得分:0)
您可以在<<Drive>>:\ProgramData\MySQL\MySQL Server 5.6\my.ini
找到配置设置文件my.ini,并将“ANSI_QUOTES”添加到sql-mode。
例如:sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES"
。这应该在SSIS编辑器中预览时解决问题。