【问题标题】:SSIS and MySQL - Table Name Delimiter IssueSSIS 和 MySQL - 表名分隔符问题
【发布时间】:2010-12-07 12:08:23
【问题描述】:

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

"shipto addresses"

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

当我在编辑器中单击“预览”时会显示上面的错误,当我运行包时会抛出类似的错误(尽管当时来自实际的插入语句)。

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

【问题讨论】:

    标签: sql mysql ssis


    【解决方案1】:

    您可以在<<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 编辑器中预览时出现的问题。

    【讨论】:

      【解决方案2】:

      对不起,InnerJoin,我不得不从你那里拿走接受的答案。我找到了a workaround here

      解决方案是为所有任务重用连接,并在执行任何插入之前为连接打开 ANSI 引号,并使用运行以下命令的 Execute Sql 任务:

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

      【讨论】:

        【解决方案3】:

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

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

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

        让我知道这些是否适合你。

        【讨论】:

        • 有问题的表名在 MySql 中,不能访问,我无法控制该架构。这个过程需要尽可能自主地定期运行,在 SQL Server 中暂存数据会使这个目标变得有点复杂。我向客户建议我们用 MySQL 中的视图替换表,并以 SSIS 可以使用的方式重命名表。此类更改不应影响任何下游系统或对 MySQL 数据库的现有查询。
        【解决方案4】:

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

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

        【讨论】:

        • SSIS 不接受双引号以外的其他分隔符。如果表名中没有空格,则没有分隔符起作用。我尝试了各种方法。
        猜你喜欢
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多