我目前正在尝试将数据库表从本地 SQL Server 迁移到基于云的 MySQL 数据库 (SingleStore)。作为初步测试,我创建了一个简化的测试表,其中包含一个整数列,其中包含一行值为 1 的行。但是,在针对此基本设置运行 SSIS 数据流任务时,我遇到以下错误:
数据流任务处出现错误:0xC020844B,ADO NET 目标[2]:数据插入期间发生异常,从提供者返回的消息为:ERROR [HY000] [MySQL][ODBC 9.0(a) Driver][mysqld- 5.7.32]没有为准备好的语句中的参数提供数据 错误:数据流任务中的 0xC0047022,SSIS.Pipeline:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。 处理输入“ADO NET 目标输入”(9) 时,组件“ADO NET 目标”(2) 上的 ProcessInput 方法失败,错误代码为 0xC020844B。所识别的组件从 ProcessInput 方法返回错误。该错误特定于该组件,但该错误是致命的,将导致数据流任务停止运行。 在此之前可能会发布错误消息,其中包含有关失败的更多信息。
设置和采取的步骤
表结构:源表和目标表具有相同的列和数据类型(名为 nu 的整数列)。
组件:我使用带有 OLE DB 源的数据流任务来连接到 SQL Server 和 MySQL 目标的 ADO.NET 目标。两个组件都成功连接到各自的数据库。
SQL模式调整:为了解决报价问题,我在数据流任务之前添加了一个执行SQL任务,在目标数据库上运行以下命令:
SET sql_mode= 'NO_ENGINE_SUBSTITUTION,ANSI_QUOTES';
此步骤完成,没有错误。
数据源模式:我已经使用“表或视图”和“SQL 命令”数据源模式测试了 OLE DB 源组件。
在 OLE DB 源中,我尝试使用“表或视图”和“SQL 命令”数据源模式。
在 ADO.NET 目标中,我单击新的“使用表或视图”以在目标中创建新表。这样我就可以克服由于报价问题而引发的错误。在开始运行 SSIS 包之前,我还确保目标中不存在该表。我执行以下查询:
create table test (
nu int);
ADO.NET 目标编辑器中的映射已正确配置,预览成功显示目标中的表。该表也在 MySQL 中成功创建,排除了权限问题(我以管理员用户身份连接)。
尽管进行了这些配置,目标表仍为空,并且 SSIS 数据流任务失败并出现上述错误。该错误表明准备好的语句中的参数存在问题,但源和目标之间的列名称或数据类型似乎没有差异。
我还尝试了 ODBC Destination,这导致了映射问题。
建议你换一个工具来完成迁移,比如mysql workbench,兼容性比较好。