SSIS和MySQL - 表名分隔符问题

时间:2009-10-16 20:34:57

标签: sql mysql ssis

我正在尝试使用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的其他包类型没有这个问题。

4 个答案:

答案 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编辑器中预览时解决问题。