SSIS和MySQL-表名分隔符问题

SSIS和MySQL-表名分隔符问题,sql,mysql,ssis,Sql,Mysql,Ssis,我正在尝试使用SQLServer2008SSIS将行从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 th

我正在尝试使用SQLServer2008SSIS将行从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目标数据源中选择一个表。 在SSIS包编辑器中,MySql表都以双引号分隔:

"shipto addresses"
如果表名中有空格,则从ADO.NET目标编辑器上的“使用表或视图”文本框中删除双引号或用其他内容替换双引号是无效的。 当SSIS将Insert查询放在一起时,它会保留双引号并添加单引号

当我在编辑器中单击“Preview”时,上面的错误就会显示出来,而当我运行包时(尽管是从实际的insert语句中),也会引发类似的错误


我似乎无法控制这种行为。有什么建议吗?我可以手工编写SQL的其他包类型没有这个问题。

尝试在表名周围使用方括号。这可能会有帮助


编辑:如果可以,我将基于Access表创建视图(没有空格),并使用这些视图进行导出。即使这意味着用链接表构建另一个Access数据库,我认为这是最好的选择。

我一直在努力将SSIS直接用于MYSQL。即使在安装了ODBC驱动程序之后,它们在数据流中也不能很好地发挥作用。我总是在SQLServer和MYSQL之间创建链接的ODBC连接。然后,我依靠链接服务器查询来传递数据。我没有使用SSIS数据流任务,而是使用Execute SQL命令,通常以执行OPENQUERY的存储过程的形式

您可以做的一个解决方案是将数据加载到SQL Server数据库中,并在将其加载到MYSQL数据库之前将其用作暂存环境。我经常在SQLServer2008和MYSQL之间移动数据,过去我经常在Access和SQLServer之间移动数据

另一种可能的解决方案是在传入的Access数据加载到MYSQL数据库之前对其进行转换。这可能会给您一个机会来清理列名和正在传递到MYSQL的实际数据


让我知道这两个答案是否对你有用。

对不起,我不得不把你接受的答案拿走。我发现:

解决方案是对所有任务重复使用连接,并在执行任何插入之前打开连接的ANSI引号,执行一个运行以下操作的Sql任务:

set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,
     NO_ENGINE_SUBSTITUTION,ANSI_QUOTES' 

您可以在
找到配置设置文件my.ini:\ProgramData\MySQL\MySQL Server 5.6\my.ini
并将“ANSI\U引号”添加到sql模式


e、 g:
sql mode=“严格的转换表,无自动创建用户,无引擎替换,ANSI引号”
。这将解决在SSIS编辑器中预览时的问题。

SSIS不接受双引号以外的其他分隔符。如果表名中没有空格,则分隔符无效。我尝试了各种方法。令人不快的表名在MySql中,而不是access,我无法控制该模式。这个过程需要定期运行并尽可能自主地运行,而将数据暂存到SQL Server中会使这个目标稍微复杂一些。我建议客户机使用MySQL中的视图替换该表,并以SSIS可以使用的方式重命名该表。这种更改不应影响任何下游系统或针对MySQL数据库的现有查询。